Lucene分析仪的比较

有人可以解释Lucene内不同分析仪之间的区别吗?我收到了一个maxClauseCount异常,我明白我可以通过使用KeywordAnalyzer来避免这种情况,但我不想在不了解分析器问题的情况下从StandardAnalyzer进行更改。非常感谢。     
已邀请:
通常,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
例外情况,我相信你会在搜索时得到它。在这种情况下,最有可能的原因是搜索查询过于复杂。尝试将其拆分为多个查询或使用更多低级函数。     
在我看来,我使用了
StandAnalyzer
SmartCNAnalyzer
。因为我必须用中文搜索文本。显然,
SmartCnAnalyzer
更善于处理中文。出于不同的目的,您必须选择properest分析仪。     

要回复问题请先登录注册