用Lucene搜索带连字符的单词

时间:2010-08-31 20:03:27

标签: lucene

我希望lucene搜索带连字符的单词, 例如:节能或“节能”作为一个单词

因此,如果输入是节能的,则tokenizer会生成类似的术语 能源或高效或节能或节能

因此lucene返回包含“节能”和“节能”的页面,但我希望它只返回节能页面

所以问题是我如何修改standardtokenizer来搜索节能作为一个完整的单词而不是将它分成单独的单词。

2 个答案:

答案 0 :(得分:8)

使用WhitespaceAnalyzer代替standardAnalyzer 这将生成仅在白色空间上划分的令牌。但要检查其他可以改变的事情。

答案 1 :(得分:0)

这是我在Lucene and Hyphen上的完整博客

如果要在StandardAnalyzer中提供对HYPHEN的支持,则必须在StandardTokenizerImpl中进行更改,以负责标记化。

StandardTokenizer将带连字符的单词分为两部分,例如,“节能”被标记为“节能”。

由于StandardTokenizerImpl.java是由jFlex生成的类,并且其输入文件为StandardTokenizerImpl.jflex,因此您必须在SUPPLEMENTARY.jflex-macro中添加以下行,该行由StandardTokenizerImpl.jflex包含< br />

            MidLetterSupp = ( [\u002D]  ) 

之后,使用jflex生成StandardTokenizerImpl.java并重建索引。