lucene的坑

 

 

分析文档

将原始内容创建为包含域(Field)的文档(Document),需要再对域中的内容进行分析,分析的过程是经过对原始文档提取单词、将字母转为小写、去除标点符号、去除停用词(没有意义的单词)等过程生成最终的语汇单元,可以将语汇单元理解为一个一个的单词。 
例如,原始文档内容如下:

Lucene is a Java full-text search engine. Lucene is not a complete 
application, but rather a code library and API that can easily be used 
to add search capabilities to applications.

上边的文档经过分析得出的语汇单元为:

lucene、java、full、search、engine……

每个单词叫做一个Term,不同的域中拆分出来的相同的单词是不同的Term(同一个域中拆分出来的相同的单词是同一个Term)。Term中包含两部分内容,一部分是文档的域名,另一部分是单词的内容。 
例如:文件名中包含的apache和文件内容中包含的apache是不同的Term。

=====================================>

1. 索引过程
1) 有一系列被索引文件(此处所指即文本数据)
2) 被索引文件经过语法分析和语言处理形成一系列词(Term)。
3) 经过索引创建形成词典和反向索引表。
4) 通过索引存储将索引写入硬盘。
2. 搜索过程
1) 用户输入查询语句。
2) 对查询语句经过语法分析和语言分析得到一系列词(Term)。
3) 通过语法分析得到一个查询树。
4) 通过索引存储将索引读入到内存。
5) 利用查询树搜索索引,从而得到每个词(Term)的文档链表,对文档链表进行交,差,并得到结果文档。
6) 将搜索到的结果文档对查询的相关性进行排序。
7) 返回查询结果给用户。

=====================================>

StandardAnalyzer分词器

 StandardAnalyzer是lucene中内置的“标准分析器”,可以做如下功能:

  1. 对原有句子按照空格进行了分词
  2. 所有的大写字母都可以能转换为小写的字母
  3. 可以去掉一些没有用处的单词,例如"is","the","are"等单词,也删除了所有的标点

=====================================>

  1. APPEND:总是追加,可能会导致错误,索引还会重复,导致返回多次结果

  2. CREATE:清空重建(推荐)

  3. CREATE_OR_APPEND【默认】:创建或追加 

  4. =====================================>

这行代码设置了存放索引的文件夹将以覆盖或者新建的方式建立。如果没有这样设置,并且在原索引文件夹中索引没有被删除的情况下,新的索引文件将会append到原来索引文件之后,这样会导致索引结果发生错误。

二、Lucene的执行流程
    前面说了Lucene的操作方式和操作数据库有点相似,所以如果要使用Lucene 就要先创建“数据库”,然后往这个“数据表”中一行一行的插入数据,数据插入成功之后,就可以操作这张“数据表”,实现增删改查操作了。

   总的来说,可以这样理解:

  1、创建一个索引文件目录,然后把需要检索的信息 用Field 对应匹配的 封装成一个Document文档对象,将这个对象放入索引文件目录中,这里既可以将索引存放到磁盘中,也可以放入内存中,如果放入内存,那么程序关闭索引就没有了,所以一般都是将索引放入磁盘中;

  2、如果发现信息有问题需要删除,那么索引文件也要删除,否则检索的时候还是会查询得到,这个时候需要根据索引id去删除对应的索引;

  3、如果发现信息被更新了,那么索引文件也要更新,这个时候需要先将旧的索引删除然后添加新的索引;

  4、最后重头戏是全文搜索了,这和查询数据库一样,先需要创建索引读取对象,然后封装Query查询对象,调用search()方法 得到检索结果。
--------------------- 
作者:夜空中苦逼的程序员 
来源:CSDN 
原文:https://blog.csdn.net/chenghui0317/article/details/10052103 

======================================>

遇到的坑1:

(1)Lunce大写的索引为啥进了索引库变成小写的了?

在文档里面是大写的,为何我搜索的时候也用大写的不能搜索出来?

分词器---->

IK分词器会将英文变成小写。(方便索引)

(代码逻辑的时候需要实现)搜索的时候不区分大小写的逻辑。

坑2:

模糊查询是区分大小写的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值