我想在 Lucene 中将像“New York”这样的“复合词”索引为单个术语,而不是像“new”、“york”那样。这样,如果有人搜索“new place”,则包含“new york”的文档将不会匹配。
我认为 N-gram(实际上是 NGramTokenizer)的情况并非如此,因为我不会只索引任何 n-gram,我只想索引一些特定的 n-gram。
我做了一些研究,我知道我应该编写自己的分析器,也许我自己的分词器。但我对扩展 TokenStream/TokenFilter/Tokenizer 有点迷失。
谢谢
最佳答案
我认为您有某种方法可以检测要保留的多字单元 (MWU)。然后你可以做的就是用下划线替换其中的空格并使用 WhiteSpaceAnalyzer
而不是 StandardAnalyzer
(它会丢弃标点符号),也许使用 LowerCaseFilter
.
编写自己的Tokenizer
需要相当多的Lucene黑魔法。我一直无法理解 Lucene 2.9+ API,但请查看 TokenStream
如果您真的想尝试,请参阅文档。
关于在 Lucene 中将 n 个单词表达式索引为单个术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3791040/