繁体   English   中英

lucene过滤器区分大小写

[英]lucene filter case sensitive

我正在从Lucene 3.0.1迁移到4.1.0。 经过几天的分析,我认为这些版本的查询过滤结果有所不同。 迁移后,我看到相同查询和过滤器的查询结果有所不同。

事情看起来如下:

我使用的是Lucene 3.0.1,但是例如,IndexWriter的StandardAnalyzer是这样配置的:

new StandardAnalyzer(Version.LUCENE_24)

QueryParser使用了相同的配置。 很少有NOT_ANALYSED字段(意味着未建立索引;在4.x中已弃用),这会导致在迁移到4.0.0或4.1.0后出现问题。 问题是某些NOT_ANALYZED的Filed的值是大写。 搜索过程如下所示:

  1. QueryParser get字段(文档对同一个字段有很多值,对于用户来说是最重要的信息)和关键字
  2. 准备具有其他用户条件的过滤器QueryWrapperFilter(TermQuery(...))
  3. 我从org.apache.lucene.search.Filter覆盖getDocIdSet,并遍历所有准备好的Filters,调用filter.getDocIdSet(IndexReader)并收集过滤后的元素。

我发现这与区分大小写有关 我知道在Lucene 2.4中使用LowerCaseFilter,我所做的是用4.x重建索引,但是现在所有的NOT_ANALYZED值都是小写的。 然后问题消失了。

对于我的使用3.0.3区分大小写的解决方案“无关紧要”,而在4.x中则“重要”的原因可能是什么。 也许有些人可以向我解释幕后发生的事情。

索引编制和分析是两件事。

分析意味着该字段将通过所选的Analyzer 未分析的字段将按原样放置在索引中。

如果您对大写字符串进行索引而不进行分析,则它将在索引中保持大写形式,并且无法使用小写查询找到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM