【发布时间】: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