【问题标题】:Elasticsearch score from 0 to 1 for searching similar documents to the one that existsElasticsearch 得分从 0 到 1,用于搜索与现有文档相似的文档
【发布时间】:2021-01-03 23:27:30
【问题描述】:

在搜索与现有文档相似的文档时需要计算从 0 到 1 的相对分数? 因此现有的文档得分为 1,所有其他匹配文档的得分都应据此计算,得分将

match_doc_score/search_doc_score

假设我们有索引 person 和映射:

{
  "properties": {
    "person_id": {
      "type": "keyword"
    },
    "fullname": {
      "type": "text"
    },
    "email": {
      "type": "keyword"
    },
    "phone": {
      "type": "keyword"
    },
    "country_of_birth": {
      "type": "keyword"
    }
  }
}

我在索引中有 3 个人: 第 1 个人:

{
  "person_id": 1,
  "fullname": "John Snow",
  "email": "john@gmail.com",
  "phone": "111-11-11",
  "country_of_birth": "Denmark"
}

第 2 个人:

{
  "person_id": 2,
  "fullname": "Snow John",
  "email": "john@gmail.com",
  "phone": "222-22-22",
  "country_of_birth": "Denmark"
}

第三个人:

{
  "person_id": 3,
  "fullname": "Peter Wislow",
  "email": "peter@gmail.com",
  "phone": "111-11-11",
  "country_of_birth": "Denmark"
}

我们通过这个查询找到与第 1 个人相似的人:

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "fullname": {
                            "query": "John Snow",
                            "boost": 6
                        }
                    }
                },
                {
                    "term": {
                        "email": {
                            "value": "john@gmail.com",
                            "boost": 5
                        }
                    }
                },
                {
                    "term": {
                        "phone": {
                            "value": "111-11-11",
                            "boost": 4
                        }
                    }
                },
                {
                    "term": {
                        "country_of_birth": {
                            "value": "Denmark",
                            "boost": 2
                        }
                    }
                }
            ],
            "must_not": [
                {
                    "term": {
                        "person_id": 123
                    }
                }
            ]
        }
    }
}

如你所见:

  • 第 1 个人和第 2 个人匹配:全名、电子邮件、出生国家/地区。
  • 第 1 个人和第 3 个人通过以下方式匹配:电话、出生国家/地区。

如果我们在索引(第 1 个人)中有完全匹配的订单,是否有可能得到 0..1 分?

我知道有一个more_like_this 查询,但在现实生活中搜索查询可能很复杂,所以more_like_this 不是一个好的选择。甚至 elasticsearch 文档都说,如果您需要对查询进行更多控制,请使用布尔查询组合。

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl


    【解决方案1】:

    没有尝试过,但功能分数的field value factor 似乎可以解决您的查询。

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2020-07-30
      • 1970-01-01
      • 2014-06-09
      相关资源
      最近更新 更多