2010-09-24 52 views
4

我想索引像“New York”这样的“复合词”作为单一术语而不是“new”,“york”。以这种方式,如果有人搜索“新地方”,包含“纽约”的文件将不匹配。在Lucene中索引n个单词表达式作为一个单词术语

我认为这不是N-grams(实际上是NGramTokenizer)的情况,因为我不会索引任何 n-gram,我只想索引一些特定的n-gram。

我已经做了一些研究,我知道我应该写我自己的分析器,也许我自己的Tokenizer。但是我有点遗憾的扩展TokenStream/TokenFilter/Tokenizer。

感谢

回答

1

我相信你有检测要保留多字为单位(MWUs)的一些方式。然后,你可以做的是用下划线替换它们中的空格,并使用WhiteSpaceAnalyzer而不是StandardAnalyzer(这会抛出标点符号),也可能使用LowerCaseFilter

写你自己Tokenizer需要相当一些Lucene黑魔法。我从来没有能够将自己的头围绕Lucene 2.9+ API,但如果你真的想尝试,请查看TokenStream文档。

0

我通过创建索引但未分析的字段来完成此操作。 为此,我使用了Field.Index.NOT_ANALYZED > doc.add(new Field(“fieldName”,“value”,Field.Store.YES,Field.Index.NOT_ANALYZED,TermVector.YES));标准分析仪 。

我在Lucene 3.0.2上工作过。

+0

但是,每个字段只能包含一个复合词,对吗?由于该领域不会被分割成部分,Lucene会认为所有领域都是一个单词,对吗? – 2010-09-30 03:48:39

+0

这是事实,该字段值不会被分割成部分。 给定字符串“一二三”作为值将被存储为一个令牌。对我而言,这并不重要,因为我存储了由lingpipe提取的实体:一个实体 - 一个术语。 – Jakub 2010-09-30 05:19:37

相关问题