【问题标题】:Similar searching with elastic search使用弹性搜索进行类似搜索
【发布时间】:2018-08-16 18:34:38
【问题描述】:

如果我有一张桌子,里面有很多人。每个人都会有自己的属性,例如姓名、社会 id、年龄、性别、孩子的数量……

给定一个 40 岁的男性,有 2 个孩子.. 提供所有与 A 相似的人。

这是我可以通过 Elastic 搜索实现的吗?我正在考虑更多类似这个查询https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html

非常感谢。

【问题讨论】:

  • 在这种情况下,“相似”是什么意思?也许更喜欢这个查询不适合您,因为它对文本进行操作
  • 所以如果我把所有东西都放在一个文本字符串中,例如“B 人,49 岁男性,夏日出生,有 2 个孩子,1 男 1 女”,“B 人,49 岁女性,冬日出生,有 1 个孩子,1 男 1 女0个女孩”。 elasticSearch 的 Maybe More Like 是否能够处理这样的事情?谢谢你:)
  • 是和不是。 MLT 将查找具有“相似”文本字符串的文档。但是“相似”的意思(或多或少)是“具有最多的共同点”。您将自己进行过滤,以确保您自己对数字相似性的定义(例如年龄、社交 ID 和孩子的数量)得到支持。否则,您最相似的人可能是“人 C,一位 79 岁的女性,在冬日出生,有 23 个孩子,1 个男孩和 22 个女孩”(因为它只有 4 个术语不同:[“C”,“79” , "23", "22"])

标签: elasticsearch


【解决方案1】:

是的,MLT 可以正常工作,您可以指定要应用的字段,这更像是此查询,例如在您的情况下,它将是年龄、孩子的数量。您要匹配的任何其他特定字段。这是示例查询-

GET /_search
{
    "query": {
        "more_like_this" : {
            "fields" : ["age", "number_of_children"],
            "like" : 
            {
                "_index" : "people",
                "_type" : "person",
                "_id" : "1"
            },
            "min_term_freq" : 1
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    相关资源
    最近更新 更多