lucene过滤器区分大小写

时间:2013-02-05 13:06:45

标签: java lucene migration 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的文件的值是大写的。搜索过程如下:

  1. QueryParser获取字段(文档对同一字段有多个值,这是用户最重要的信息)和关键字
  2. 准备了具有其他用户条件的过滤器QueryWrapperFilter(TermQuery(...))
  3. 我从org.apache.lucene.search.Filter覆盖getDocIdSet,并遍历调用filter.getDocIdSet(IndexReader)并收集过滤元素的所有准备好的过滤器。
  4. 我找到了this ansewer regarding case sensitivity。我知道LowerCaseFilter is used in lucene 2.4 我所做的是使用4.x重新构建索引,但所有NOT_ANALYZED值现在都是小写的。然后问题就消失了。

    对于我的解决方案使用3.0.3案例敏感度“无关紧要”和4.x“重要”的原因可能是什么。也许你们中的一些人可以向我解释幕后发生的事情。

1 个答案:

答案 0 :(得分:0)

索引和分析是两回事。

分析表示该字段通过所选的Analyzer。非分析的字段将按照它们的方式放入索引中。

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