Lucene学习笔记

1.Lucene是一个信息检索工具库

2.搜索数据前需要对数据进行索引

3.IndexWritter类和IndexReader类中的maxDoc()方法返回索引中包括被删除和未被删除的文档总数,而numDocs()方法只返回索引中未被删除的文档数。

4.由于打开一个IndexReader需要较大的系统开销,因此最好在所有搜索期间都重复使用同一个IndexReader实例,只有在必要的时候才建议打开新的IndexReader。

5.在创建IndexReader时,它会搜索已有的索引快照。如果你需要搜索索引中的变更信息,那么必须打开一个新的reader,可以使用IndexReader.reopen方法。

IndexReader newReader = reader.reopen();
if (reader != newReader) {
    reader.close();
    reader = newReader;
    searcher = new IndexSearcher(reader);
} 

6.BooleanQuery 对其中包含的查询子句是有数量限制的,默认情况下允许包含 1024 个查询子句。该限制主要是为了防止对应用程序的性能造成影响。当字句数量超过最大值时,程序会抛出 TooManyClauses异常。如果在一些特殊情况下需要增大查询子句的数量限制,可以使用BooleanQuery 类提供的 ClauseCount(int) 方法进行设置。

7.如果查询表达式中使用了特殊字符,就需要对其进行转义操作。QueryParser 在各个项中使用反斜杠(\)来表示转义字符。需要进行转义的字符有:

\  +  -  !  (  )  :  ^  ]  {  }  ~  *  ?

8.四个内置分析器分析效果:

例句1:The quick brown fox jumped over the lazy dog

例句2:XY&Z Corporation-xyz@example.com

WhitespaceAnalyzer:

[The] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dog] 

[XY&Z] [Corporation] [-] [xyz@example.com] 

SimpleAnalyzer:

[the] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dog] 

[xy] [z] [corporation] [xyz] [example] [com] 

StopAnalyzer:

[quick] [brown] [fox] [jumped] [over] [lazy] [dog] 

[xy] [z] [corporation] [xyz] [example] [com] 

StandardAnalyzer:

[quick] [brown] [fox] [jumped] [over] [lazy] [dog] 

[XY&Z] [Corporation] [xyz@example.com] 

9.当搜索程序从通过索引检索文档时,只有被存储的域才会被作为搜索结果展现。例如:被索引但未被存储于文档的域是不会被作为搜索结果展现的。这种机制通常会使得搜索结果具有不确定性。

10.特定域分析:文档可能包含多个不同的域,而每个域都需要用对应的分析器来分析。

PerFieldAnalyzerWrapper analyzer = new PerFieldAnalyzerWrapper(new SimpleAnalyzer());
analyzer.addAnalyzer("body", new StandardAnalyzer(Version.LUCENE_30));
在创建PerFieldAnalyzer时,需要提供默认的分析器。然后,对于需要使用不同分析器进行处理的域,可以调用 addAnalyzer 方法。

11.StandardAnalyzer是Lucene内置的唯一能够处理亚洲语种的分析器,该分析器可以将一定范围内的Unicode编码识别为CJK字符,并将它们拆分为独立的语汇单元。

Lucene 的contrib目录中有3个分析器适合于处理亚洲语言:CJKAnalyzer、ChineseAnalyzer和SmartChineseAnalyzer。

不通分析器对中文字符串“道德经”的处理结果如下:

SimpleAnalyzer:[道德经]

StandardAnalyzer:[道] [德] [经]

ChineseAnalyzer:[道] [德] [经]

CJKAnalyzer:[道德] [德经]

SmartChineseAnalyzer:[道德] [经]

12.IndexSearch按照评分排序Sort.RELEVANCE,按照文档的索引排序Sort.INDEXORDER

13.默认情况下,Lucene针对域的排序方向使用的是自然排序方式。自然排序会对相关度采用降序排序,但对其他域采用升序排序。

14.索引期间,用于排序的域是必须进行索引的,在每个document中,这些field每一个必须只含有一个token。通常这意味着使用Field.Index.NOT_ANALYZED或Field.Index.NOT_ANALYZED_NO_NORMS(如果你没对文档或域进行加权的话)选项,但若你的分析器只生成一个语汇单元,比如 KeywordAnalyzer、Field.Index.ANALYZER或者Field.Index.ANALYZER_NO_NORMS选项也可以使用。

15.


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值