elasticsearch赋予不同领域和场景更多权重
elasticsearch giving more weight to different fields and scenarios
我有这个 ES 查询:
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "test",
"fields": [
"name^-1.0",
"id^-1.0",
"address.city^-1.0",
"address.street^-1.0"
],
"type": "phrase_prefix",
"lenient": "true"
}
}
],
"boost": 1.0,
"minimum_should_match": "1"
}
},
"from": 0,
"size": 20
}
目前发生的情况是,当我搜索名字为 john
的人时,我会得到一堆结果,其中 id, address.city, address.street
包含 john,这很好,但我想要name
更重要,而且如果我在 es 中有 2 个人 john
和有 2 个名字的人 george john
我希望 john
先出现.
我能做到吗? :)
要使任何字段比其他字段更重要,您可以将其提升设置为更高的值。因此,如果 fieldA^4
和 fieldB^1
这意味着 fieldA
比 fieldB
重要 4 倍。因此,您可以为 name
字段提供更高的提升值,使其对评分更重要。
对于第二点,name
字段值为 john
的文档比 name
字段值为 george john
的文档得分更高 (假设其他字段在两个文档中具有相同的数据)。您获得第二个文档 (george john) 更高结果的原因是因为您提升了所有具有负值的字段。
所以为了迎合你的两点
- 给予更高的提升
name
- 将所有字段提升为正值。
所以查询应该如下所示:
{
//"explain": true,
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "john",
"fields": [
"name^4.0",
"id^1.0",
"address.city^1.0",
"address.street^1.0"
],
"type": "phrase_prefix",
"lenient": "true"
}
}
],
"boost": 1,
"minimum_should_match": "1"
}
},
"from": 0,
"size": 20
}
要了解有关 elastic 如何计算匹配文档分数的更多信息,您可以在查询中使用 "explain": true
。这将给出结果中的详细步骤,由 elastic 计算分数。
我有这个 ES 查询:
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "test",
"fields": [
"name^-1.0",
"id^-1.0",
"address.city^-1.0",
"address.street^-1.0"
],
"type": "phrase_prefix",
"lenient": "true"
}
}
],
"boost": 1.0,
"minimum_should_match": "1"
}
},
"from": 0,
"size": 20
}
目前发生的情况是,当我搜索名字为 john
的人时,我会得到一堆结果,其中 id, address.city, address.street
包含 john,这很好,但我想要name
更重要,而且如果我在 es 中有 2 个人 john
和有 2 个名字的人 george john
我希望 john
先出现.
我能做到吗? :)
要使任何字段比其他字段更重要,您可以将其提升设置为更高的值。因此,如果 fieldA^4
和 fieldB^1
这意味着 fieldA
比 fieldB
重要 4 倍。因此,您可以为 name
字段提供更高的提升值,使其对评分更重要。
对于第二点,name
字段值为 john
的文档比 name
字段值为 george john
的文档得分更高 (假设其他字段在两个文档中具有相同的数据)。您获得第二个文档 (george john) 更高结果的原因是因为您提升了所有具有负值的字段。
所以为了迎合你的两点
- 给予更高的提升
name
- 将所有字段提升为正值。
所以查询应该如下所示:
{
//"explain": true,
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "john",
"fields": [
"name^4.0",
"id^1.0",
"address.city^1.0",
"address.street^1.0"
],
"type": "phrase_prefix",
"lenient": "true"
}
}
],
"boost": 1,
"minimum_should_match": "1"
}
},
"from": 0,
"size": 20
}
要了解有关 elastic 如何计算匹配文档分数的更多信息,您可以在查询中使用 "explain": true
。这将给出结果中的详细步骤,由 elastic 计算分数。