一尘不染

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

elasticsearch

好了,在整日努力梳理头发之后,我决定从社区中获取一些建议。

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

因此,它基本上是在对先前的索引进行重复数据删除,并基于我所追求的字段相似性:)


阅读 262

收藏
2020-06-22

共1个答案

一尘不染

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

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

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

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

2020-06-22