0

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

我正在考虑使用:

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

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

我在这里错过任何其他注意事项吗?

4

1 回答 1

0

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

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

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

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

如果您存储字段的目的是使用突出显示,您还应该考虑使用Field.TermVector.WITH_POSITIONS_OFFSETS.

于 2012-07-05T17:37:12.487 回答