有人可以解释Lucene内不同分析仪之间的区别吗?我收到了一个maxClauseCount异常,我明白我可以通过使用KeywordAnalyzer来避免这种情况,但我不想在不了解分析器问题的情况下从StandardAnalyzer进行更改.非常感谢.
ffr*_*end 208
通常,Lucene中的任何分析器都是tokenizer + stemmer + stop-words过滤器.
Tokenizer将您的文本拆分为块,并且由于不同的分析器可能使用不同的tokenizer,您可以获得不同的输出令牌流,即文本块的序列.例如,KeywordAnalyzer您提到的根本不拆分文本并将所有字段作为单个标记.同时,StandardAnalyzer(和大多数其他分析仪)使用空格和标点符号作为分裂点.例如,对于短语"我很高兴",它将产生列表["i","am","very","happy"](或类似的东西).有关特定分析器/标记器的更多信息,请参阅其Java Docs.
词干用于获取相关单词的基础.它在很大程度上取决于使用的语言.例如,对于以前的英语短语,会产生类似["i","be","veri","happi"]的东西,以及法语"Jesuistrèsheureux"某种法语分析器(如SnowballAnalyzer初始化)用"法语")会产生["je","être","tre","heur"].当然,如果您将使用一种语言的分析器来阻止另一种语言的文本,则将使用来自另一种语言的规则,并且词干分析器可能会产生不正确的结果.并非所有系统都失败,但搜索结果可能不太准确.
KeywordAnalyzer不使用任何词干分析器,它通过所有未经修改的字段.因此,如果您要搜索英文文本中的某些单词,使用此分析器并不是一个好主意.
停用词是最常见且几乎无用的词.同样,它在很大程度上取决于语言.对于英语,这些单词是"a","the","I","be","have"等.停用词过滤器从令牌流中删除它们以降低搜索结果中的噪音,所以最后我们的短语"I "我很高兴" StandardAnalyzer将被转换为列表["veri","happi"].
并且KeywordAnalyzer再没有做任何事.因此,KeywordAnalyzer用于ID或电话号码等内容,但不适用于通常的文本.
至于你的maxClauseCount例外,我相信你会在搜索时得到它.在这种情况下,最有可能的原因是搜索查询过于复杂.尝试将其拆分为多个查询或使用更多低级函数.
| 归档时间: |
|
| 查看次数: |
40652 次 |
| 最近记录: |