Lucene索引忽略撇号

时间:2012-07-03 11:01:36

标签: lucene

我有一个可能包含撇号的字段。 我希望能够: 1.将值存储在索引中 2.根据忽略任何撇号的值进行搜索。

我正在考虑使用:

   doc.add(new Field("name", value, Store.YES, Index.NO));
   doc.add(new Field("name", value.replaceAll("['‘’`]",""), Store.NO, Index.ANALYZED));

如果我在搜索时执行相同的替换,我猜它应该可以工作并使用清除的值来索引/搜索,并将值用于显示。

我在这里缺少任何其他考虑因素吗?

1 个答案:

答案 0 :(得分:0)

直接在值上执行replaceAll这是Lucene中的错误做法,因为将标记化配方封装在Analyzer中会更好。此外,我没有看到在您的用例中附加字段的好处(请参阅Document.add)。

如果您想存储原始值但是能够在没有撇号的情况下进行搜索,只需声明您的字段:

doc.add(new Field("name", value, Store.YES, Index.ANALYZED);

然后简单地连接一个将替换撇号的自定义Tokenizer(我认为Lucene的StandardAnalyzer已包含此转换。)

如果您要存储字段以使用突出显示,则还应考虑使用Field.TermVector.WITH_POSITIONS_OFFSETS