Lucene 的MoreLikeThis (mlt) 和FuzzyQuery (flt) 有什么区别?
我正在通过 Elasticsearch (ES) 评估这两种查询类型,我发现它们在概念上非常相似:
mlt
:将现有文档字段与其他文档的字段进行比较flt
: 将字符串与其他文档的字段进行比较
但是,flt
性能似乎比mlt
查询慢一个数量级。
我正在使用最新的 ES,而后者又使用 Lucene 4.5。
从像这样的模糊文档中:
模糊化作为字符串提供的所有术语,然后选择最好的 n 个区分术语。实际上,这混合了 FuzzyQuery 和 MoreLikeThis 的行为,但特别考虑了模糊评分因素。这对于用户可能在多个字段中提供详细信息并且不了解布尔查询语法并且还需要一定程度的模糊匹配和快速查询的查询通常会产生良好的结果。
对于每个源术语,模糊变体都保存在没有坐标因子的 BooleanQuery 中(因为我们不是在任何一个文档中寻找多个变体的匹配项)。此外,一个专门的 TermQuery 用于变体并且不使用该变体术语的 IDF,因为这将有利于更罕见的术语,例如拼写错误。相反,所有变体都使用相同的 IDF 排名(用于源查询词的排名),这被考虑到变体的提升中。如果索引中不存在源查询词,则使用变体的平均 IDF。