lucene全文检索概述(三) 淩亂°似流年 2022-01-21 01:37 288阅读 0赞 # lucene全文检索概述(三) # **目录** lucene全文检索概述(三) 一.Lucene创建索引 1代码编写生成空索引文件 1.代码模板 2.运行代码 3.添加数据 4.执行代码 5.利用luke软件观察当前生成的索引内容 6.存在的问题 7.Store的yes和no的用处? -------------------- ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70][] # 一.Lucene创建索引 # ## 1代码编写生成空索引文件 ## **使用lucene全文检索引擎工具包在windows中创建可以使用的第一个索引文件** * 指向一个文件夹位置(项目根目录) * 生成一个索引创建的输出流对象IndexWriter(绑定Analayzer) * document对象数据的封装整理 * 输出到索引的目录文件夹生成索引供搜索服务 * 完成一个空文件的创建 ### 1.代码模板 ### public class CreateIndex { @Test public void createIndex() throws Exception{ //1指定一个文件夹位置,项目根目录./index01 Path path = Paths.get("d:/index01"); //lucene的文件夹对象包装path FSDirectory dir = FSDirectory.open(path); //2生成一个创建索引的输出对象 //配置的生成,输出的原则覆盖,追加,输出计算分词的分词器 IndexWriterConfig config= new IndexWriterConfig(new IKAnalyzer6x()); //配置追加覆盖的原则 append 追加 create 覆盖 crate_or_append config.setOpenMode(OpenMode.CREATE); IndexWriter writer=new IndexWriter(dir, config); //3编辑收集document数据的对象封装过程 //添加一个新闻的数据,添加一个商品数据 Document doc1=new Document(); Document doc2=new Document(); //封装数据手动封装,不同的field域属性和值 //网页数据的addresshttps://ent.sina.com.cn //Store.yes/no的区别,TextField和StringField区别 //4利用输出writer写出索引文件,索引文件是空的 writer.addDocument(doc1); /*writer.addDocument(doc2);*/ writer.commit(); } } ### 2.运行代码 ### ![20190607132456522.png][] **仅仅是包含了一个index索引的基础结构,没有任何数据,分词整合结果,document数据都不存在** ### **3.添加数据** ### //添加一个新闻的数据,添加一个商品数据 Document doc1=new Document(); Document doc2=new Document(); //封装数据手动封装,不同的field域属性和值 doc1.add(new TextField("title", "文娱大播报1", Store.YES));//title 域,文旅部督办张云雷调侃事件 存储 doc1.add(new TextField("publisher","新华社1",Store.YES)); doc1.add(new TextField("content","北京德云社火爆售票,每张票100元1",Store.NO)); doc1.add(new TextField("name","三星屏幕1",Store.YES)); doc1.add(new IntPoint("price", 500)); doc1.add(new StringField("address","https://ent.deyunshe.com.cn",Store.YES));//网页数据的addresshttps://ent.sina.com.cn doc2.add(new TextField("title", "文娱大播报2", Store.YES));//title,文旅部督办张云雷调侃事件 doc2.add(new TextField("publisher","新华社2",Store.YES)); doc2.add(new TextField("content","北京德云社火爆售票,每张票100元2",Store.NO)); doc2.add(new TextField("name","三星屏幕2",Store.YES)); doc2.add(new IntPoint("price", 600)); doc2.add(new StringField("address","https://ent.deyunshe.com.cn",Store.YES)); ### 4.执行代码 ### ![20190607133322266.png][] **生成一堆二进制文件** ### 5.利用luke软件观察当前生成的索引内容 ### ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 1][] **luke6.0.0是使用lucene编写的一个查看索引的软件** **1.进入文件夹双机bat文件,在jdk环境下直接启动软件** ![20190607133533428.png][] **2.指向索引文件的根目录** ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 2][] **3.项目根目录不好找的话,更改路径 生成在D盘** ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 3][] **4.指向对应路径** ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 4][] **5.点击OK** ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 5][] **6.overview** * 域的个数:7 * document文档的个数:2 * term的个数:32 **7.document标签** ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 6][] **可以观察任意一个document的数据** **8. overview左下框表示域的词项统计数据** ![20190607134201978.png][] **9.自动分词** ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 7][] ### 6.存在的问题 ### **FIELD类型都有哪些怎么用?** * 字符串文本:Text(对当前需要计算分词) String(对域不需要计算分词) * 数字多种:IntPoint DoublePoint LongPoint * Point类型数据只形成数字特性的管理维护(范围查询) * 例如价钱: 1000-5000之间的商品,完成范围查询必须在 * 域中添加Point类型数据,否则无法查询,但是查询的记过中document是不保存这个数据的. ### 7.Store的yes和no的用处? ### * YES表示当前域的值需要存储在索引中. * NO表示当前域的值不需要存储在索引中. ![20190607134834707.png][] **一个document的数据中域的类型和存储与不存储是分开管理** **1.只使用IntPoint/DoublePoint类型定义一个域:** * **这个域的value只能用作查询时的数据计算(范围)** * **无法从查询结果中拿到当前域的值** **2.使用了Text类型的域定义Store.NO:** * 可以使用分词查询到document * 但是无法查询之后获取域的值 **3.使用Text类型的域定义Store.YES** * 既可以使用分词查询到document * 也可以在查询结果中获取域的值 **4.使用String类型的域定义Store.No** * 使用值的整体进行查询(不分词) * 不能从查询结果中获取值 **5.使用String类型的域定义Store.YES** * 使用整体查询获取document(不分词) * document有当前域的值 **NO 就算查得到,也无法获取** **如果既要计算数字特性的范围查询,也要从数据中获取查询结果的值** **StringField和Point类型一起使用,域名称完全一样,值也要完全一样.** **只要是Point类型的一律不存储(单独使用),写上也直接报错** ![20190607135841972.png][] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70]: /images/20220121/93fc3283fb8043bcb4a176316d0acb5b.png [20190607132456522.png]: /images/20220121/dc155c26deb24c32a56b5883c3efb31a.png [20190607133322266.png]: /images/20220121/6d4f6804348f4c6da33432002356f307.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 1]: /images/20220121/834c7a738c104b84bd4ad1bfaa3aa790.png [20190607133533428.png]: /images/20220121/cd0fd4c8ec3a4591b8d375c385be957e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 2]: /images/20220121/bb53a1adf6674e59b36daa3f8e9f3584.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 3]: /images/20220121/5bef184281d043d49464f35f84b7b05d.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 4]: /images/20220121/30fab8ea6ffc46eeb48316442d13b591.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 5]: /images/20220121/14e704552d4f4ac483f2013bcc0f764e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 6]: /images/20220121/dda2233194fd4d798392b613f23da96b.png [20190607134201978.png]: /images/20220121/00a6e524b838480492cb45e4e4e25f3f.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 7]: /images/20220121/687f9d5aca084766aea9558c1818d29d.png [20190607134834707.png]: /images/20220121/70c2ad5e2834486087231cba9917e710.png [20190607135841972.png]: /images/20220121/3874685c3e1d4480aaa2803edd620e0d.png
还没有评论,来说两句吧...