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

标签 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"
}

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

最佳答案

满足您需求的理想解决方案是 more_like_this 查询。

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

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

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

关于php - 在索引之前检查Elasticsearch文档的相似性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35633799/

相关文章:

php - 如何在mysql中使用外键state_id将表位置拆分为两个表状态,城市?

php - php html中的出生日期值

php - Symfony - 属性 "first_name"和方法之一都不存在,并且在类 "Symfony\Component\Form\FormView"中没有公共(public)访问权限

elasticsearch - 何时启动其他Elasticsearch节点?

elasticsearch - 当Logstash将ACK发送到输入源时

php - 如何从 Laravel 中的内部 api 请求获取 json 响应?

php - PDO - 插入(INSERT INTO ...)代码不起作用

elasticsearch - 通过Ansible或Fig运行docker中的传递参数(例如-Des.node.name =“TestNode”)

php - Symfony2,FOSRestBundle - 捕获异常

php - symfony v3.4 无法猜测 Autowiring