我有一个可能包含撇号的字段。 我希望能够: 1.将值存储在索引中 2.根据忽略任何撇号的值进行搜索。
我正在考虑使用:
doc.add(new Field("name", value, Store.YES, Index.NO));
doc.add(new Field("name", value.replaceAll("['‘’`]",""), Store.NO, Index.ANALYZED));
如果我在搜索时执行相同的替换,我猜它应该可以工作并使用清除的值来索引/搜索,并将值用于显示。
我在这里缺少任何其他考虑因素吗?
答案 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
。