我想将“纽约”中的“复合词”索引为Lucene中的单词,而不是像“new”,“york”。以这种方式,如果有人搜索“新地方”,包含“纽约”的文档将不匹配。
我认为对于N-gram(实际上是NGramTokenizer)来说并非如此,因为我不会仅仅任何 n-gram索引,我只想索引一些特定的n-gram。< / p>
我做了一些研究,我知道我应该编写自己的分析器,也许我自己的Tokenizer。但我有点丢失了扩展TokenStream / TokenFilter / Tokenizer。
由于
答案 0 :(得分:1)
我认为您可以通过某种方式检测要保留的多字单元(MWU)。然后你可以做的是用下划线替换它们中的空格,并使用WhiteSpaceAnalyzer
而不是StandardAnalyzer
(抛出标点符号),也许使用LowerCaseFilter
。
编写自己的Tokenizer
需要一些Lucene黑魔法。我从来没有能够绕过Lucene 2.9+ API,但如果您真的想尝试,请查看TokenStream
文档。
答案 1 :(得分:0)
我是通过创建索引但未分析的字段来完成的。 为此,我使用了Field.Index.NOT_ANALYZED &GT; doc.add(new Field(“fieldName”,“value”,Field.Store.YES,Field.Index.NOT_ANALYZED,TermVector.YES)); StandardAnalyzer。
我参与了Lucene 3.0.2。