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


Check Elasticsearch document similarity before indexing

好的,在整天试图弄清楚这一点之后,我决定从社区获得一些意见。

应该提到的是,我对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"
}

所以它基本上是对先前索引的重复数据删除,并基于我在:)之后的字段相似性

满足

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

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

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

有关参数的完整列表,请参阅上面链接的文档页面。