【发布时间】:2013-10-14 16:25:34
【问题描述】:
Lucene的MoreLikeThis有什么区别(mlt) 和FuzzyQuery (flt)?
我正在通过 Elasticsearch (ES) 评估这两种查询类型,我发现它们在概念上非常相似:
-
mlt:将现有文档的字段与其他文档的字段进行比较 -
flt:将字符串与其他文档的字段进行比较
但是,flt 的性能似乎比 mlt 查询慢了一个数量级。
我正在使用最新的 ES,而后者又使用 Lucene 4.5。
来自fuzzy like this 文档:
模糊所有以字符串形式提供的术语,然后选择最好的 n 个可区分术语。实际上,这混合了 FuzzyQuery 和 MoreLikeThis 的行为,但特别考虑了模糊评分因素。对于用户可能会在多个字段中提供详细信息并且不了解布尔查询语法并且还需要一定程度的模糊匹配和快速查询的查询,这通常会产生良好的结果。
对于每个源术语,模糊变体都保存在没有坐标因子的 BooleanQuery 中(因为我们不是在任何一个文档中寻找多个变体的匹配项)。此外,一个专门的 TermQuery 用于变体并且不使用该变体术语的 IDF,因为这将有利于更罕见的术语,例如拼写错误。相反,所有变体都使用相同的 IDF 排名(源查询词的排名),这被计入了变体的提升。如果索引中不存在源查询词,则使用变体的平均 IDF。
【问题讨论】:
-
请问您得到的答案是否有帮助?
-
@javanna,抱歉没有回复。好吧,您的回答很好,而且我了解到,Fuzzy 在内部使用 MLT + 一些附加功能,这使得它变得相当慢。我想要的是一些源代码 + 示例来说明差异,但这是很多工作,我有时可能会自己做。在那之前我很乐意接受你的回答:)
标签: lucene elasticsearch similarity fuzzy-search morelikethis