在建立索引之前检查Elasticsearch文档的相似性

时间:2016-02-25 17:09:02

标签: php symfony elasticsearch elastica

好好整天拉掉我的头发试图找出那个头发后我决定从社区得到一些意见。

应该提到的是,我对Elasticsearch来说还不够新鲜。

我的想法是,我有一个包含一些文档的ES索引,只有在没有具有相似字段内容(但不一定是等于)的现有文档已经编入索引时,我才需要索引新文档。

我可以在多个字段上执行匹配查询并获得查询的全局分数,但由于该分数不是可用最高分数的百分比,因此我不确定如何设置阈值以确定我是否可以是否插入文件。

我显然对ES得分系统感到有些困惑。 提前感谢我能得到的所有帮助。

修改

作为一个基本的例子

这已编入索引:

{
  "title": "My first blog entry",
  "text":  "Just trying this out...",
  "date":  "2014/01/01"
}

这是新的,但不应编入索引,因为字段不等于但过于相似:

{
  "title": "My first blog entries",
  "text":  "Just trying it out...",
  "date":  "2014/01/01"
}

这是新的,应该编入索引:

{
  "title": "My second entry for this blog",
  "text":  "I am just trying out a few things",
  "date":  "2014/01/01"
}

所以它基本上是在扣除先前的索引并基于我追求的字段相似性:)

1 个答案:

答案 0 :(得分:1)

满足您需求的完美解决方案是more_like_this查询。

在此类查询中,您可以在like字段中提供人工文档,该文档将与索引中的文档进行相似性匹配。默认情况下,它们将使用所有可用字段,但您也可以选择要比较的有限数量的字段。

大多数情况下,此查询用于检索类似于用户可能正在查看的一个或几个文档或用户已选择的文档。尽管如此,您可以使用此功能来分析返回文档的分数(如果有的话),并决定是否为您的文档编制索引。

请参阅上面链接的文档页面以获取完整的参数列表。