【发布时间】:2010-08-31 20:03:27
【问题描述】:
我想让 lucene 搜索带连字符的单词, 例如:节能或“节能”作为一个词
因此,如果输入是节能的,则分词器会生成如下术语 节能或高效或节能或节能
因此,lucene 返回包含“节能”和“节能”的页面,但我希望它只返回节能页面
所以问题是如何修改标准标记器以搜索节能作为一个完整的单词而不是将其分解为单独的单词。
【问题讨论】:
标签: lucene
我想让 lucene 搜索带连字符的单词, 例如:节能或“节能”作为一个词
因此,如果输入是节能的,则分词器会生成如下术语 节能或高效或节能或节能
因此,lucene 返回包含“节能”和“节能”的页面,但我希望它只返回节能页面
所以问题是如何修改标准标记器以搜索节能作为一个完整的单词而不是将其分解为单独的单词。
【问题讨论】:
标签: lucene
使用WhitespaceAnalyzer 代替standardAnalyzer。
这将生成仅在空白处划分的标记。但请检查其他将要更改的内容。
【讨论】:
Analyzer 来防止停用词被过滤,所以我现在在我的分析器中使用WhitespaceTokenizer 而不是StandardTokenizer。但请注意,当使用 WhitespaceTokenizer 时,搜索会区分大小写。所以我必须先用LowerCaseFilter 包装它。
这是我在 Lucene and Hyphen 上的完整博客
如果您想在 StandardAnalyzer 中支持 HYPHEN,那么您必须在负责标记化的 StandardTokenizerImpl 中进行更改。
StandardTokenizer 将连字符分成两个单词,例如“energy-efficient”被标记为 energy,efficient。
由于StandardTokenizerImpl.java 是从jFlex 生成的类,其输入文件是StandardTokenizerImpl.jflex,您必须在SUPPLEMENTARY.jflex-macro 中添加以下行,该行包含在StandardTokenizerImpl.jflex 中
MidLetterSupp = ( [\u002D] )
之后使用 jflex 生成 StandardTokenizerImpl.java 并重建索引。
【讨论】: