2012-07-03 141 views
0

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

我想使用的:

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

,如果我那么做同样的搜索我想它应该工作,并使用清除值索引/搜索和值是显示时更换。

我错过了这里的任何其他考虑?

回答

0

直接对值执行replaceAll这是在Lucene中的一个不好的做法,因为将您的标记化配方封装在Analyzer中会更好。我也没有看到在你的用例中添加字段的好处(见Document.add)。

如果你想存储的原始值,但能够在不撇号搜索简单地声明你的领域是这样的:

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

然后简单地挂上一个自定义Tokenizer将取代单引号(我觉得Lucene的StandardAnalyzer已包含此转换)。

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

+0

感谢jspboix,我应该在哪里以及如何连接自定义Tokenizer?我需要Tokenizer还是Analizer? – epeleg

+0

我接受这个答案,因为它可能是正确的路要走。至于我自己,我结束了Q.中描述的两个'.add'调用。 – epeleg