Elasticsearch使用不同权重查询不同字段

lkaoscv7  于 2022-11-22  发布在  ElasticSearch
关注(0)|答案(2)|浏览(105)

假设我有3个不同的字段,A为文本类型,B为整数类型,C为日期类型。我为所有3个字段设置了其他查询条件。除此之外,我希望给予字段C比B比A更大的权重。即A查找具有单词“xyz”的文本,它具有较低的优先级,假设权重为1,B查找大于100的值,它具有一定的优先级。例如权重5和C应当具有大于2022年6月的日期,并且其具有权重10的较高优先级。
如何编写es查询来执行此操作

hfsqlsce

hfsqlsce1#

这是您的查询。请根据您的数据进行测试,并检查此查询是否满足您的要求。

GET index-name/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "function_score": {
            "functions": [
              {
                "filter": {
                  "multi_match": {
                    "query": "search-text",
                    "fields": [
                      "field-A"
                    ]
                  }
                },
                "weight": 1
              },
              {
                "filter": {
                  "range": {
                    "field-B": {
                      "gt": 100
                    }
                  }
                },
                "weight": 5
              },
              {
                
                "filter": {
                  "range": {
                    "field-C": {
                      "gte": "2022-06-01"
                    }
                  }
                },
                "weight": 10
              }
            ],
            "score_mode": "max",
            "boost_mode": "replace"
          }
        }
      ]
    }
  },
  "_source": ["field-A", "field-B", "field-C"]     ----> if you want verify with limited fields
}
r1zk6ea1

r1zk6ea12#

您可以提高查询效率。请查看以下链接:
Elasticsearch 8.4
Elasticsearch 7.17
我希望这有助于构造您的查询。

相关问题