将n字表达式索引为Lucene中的单个术语

时间:2010-09-24 21:13:18

标签: indexing lucene tokenize

我想将“纽约”中的“复合词”索引为Lucene中的单词,而不是像“new”,“york”。以这种方式,如果有人搜索“新地方”,包含“纽约”的文档将不匹配。

我认为对于N-gram(实际上是NGramTokenizer)来说并非如此,因为我不会仅仅任何 n-gram索引,我只想索引一些特定的n-gram。< / p>

我做了一些研究,我知道我应该编写自己的分析器,也许我自己的Tokenizer。但我有点丢失了扩展TokenStream / TokenFilter / Tokenizer。

由于

2 个答案:

答案 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。