【问题标题】:Check Elasticsearch document similarity before indexing在索引之前检查 Elasticsearch 文档的相似性
【发布时间】:2016-02-25 17:09:01
【问题描述】:

好吧,在整天想弄明白这个问题后,我决定从社区获得一些意见。

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

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

【问题讨论】:

  • 最好提供一些示例文档以及您希望它们如何匹配(或不匹配)。没有更多信息,很难想象你在追求什么。帮助我们帮助你;-)
  • 嗨,我已经用示例更新了问题:)

标签: php symfony elasticsearch elastica


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,我要调查一下more_like_this,看看情况如何!
猜你喜欢
  • 2014-06-09
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
相关资源
最近更新 更多