4

Lucene 的MoreLikeThis (mlt) 和FuzzyQuery (flt) 有什么区别?

我正在通过 Elasticsearch (ES) 评估这两种查询类型,我发现它们在概念上非常相似:

  • mlt:将现有文档字段与其他文档的字段进行比较
  • flt: 将字符串与其他文档的字段进行比较

但是,flt性能似乎比mlt查询慢一个数量级。

我正在使用最新的 ES,而后者又使用 Lucene 4.5。


像这样的模糊文档中:

模糊化作为字符串提供的所有术语,然后选择最好的 n 个区分术语。实际上,这混合了 FuzzyQuery 和 MoreLikeThis 的行为,但特别考虑了模糊评分因素。这对于用户可能在多个字段中提供详细信息并且不了解布尔查询语法并且还需要一定程度的模糊匹配和快速查询的查询通常会产生良好的结果。

对于每个源术语,模糊变体都保存在没有坐标因子的 BooleanQuery 中(因为我们不是在任何一个文档中寻找多个变体的匹配项)。此外,一个专门的 TermQuery 用于变体并且不使用该变体术语的 IDF,因为这将有利于更罕见的术语,例如拼写错误。相反,所有变体都使用相同的 IDF 排名(用于源查询词的排名),这被考虑到变体的提升中。如果索引中不存在源查询词,则使用变体的平均 IDF。

4

1 回答 1

2

您将more like this 查询模糊 like this 查询进行比较。尽管后者为“更像这样”的查询增加了一些模糊性,但它与下面使用的模糊查询不同。

“更像这样”允许您指定一个like_text和一个fields. 因此,将返回在指定字段中包含该文本的文档。您可以调整术语的频率以控制何时返回或忽略文档,以便根据您的要求获得足够相似且足够有趣的文档。

“fuzzy like this”具有类似的结构,实际上更像是这种查询,它在内部也使用模糊查询来查找相似的文档。这意味着返回的文档不仅包含您在 中请求的like_text术语,还包含类似的术语,对它们应用了一些模糊性。慢的原因其实是模糊查询,虽然使用 Lucene 4.x 改进了很多,但代价更高。

于 2013-10-17T08:47:53.120 回答