gpt4 book ai didi

elasticsearch - elasticsearch赋予不同领域和方案更多的权重

转载 作者:行者123 更新时间:2023-12-02 22:56:12 28 4
gpt4 key购买 nike

我有这个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^4fieldB^1表示fieldAfieldB重要4倍。因此,您可以给name字段赋予更高的提升值,使其对得分更重要。

对于第二点,具有name字段值为john的文档将比具有name字段值为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
    }

    要了解有关 flex 如何计算匹配文档的分数的更多信息,可以在查询中使用 "explain": true。这将给出结果的详细步骤,由Elastic采取以计算分数。

    关于elasticsearch - elasticsearch赋予不同领域和方案更多的权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53997209/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com