假设我有3个不同的字段,A为文本类型,B为整数类型,C为日期类型。我为所有3个字段设置了其他查询条件。除此之外,我希望给予字段C比B比A更大的权重。即A查找具有单词“xyz”的文本,它具有较低的优先级,假设权重为1,B查找大于100的值,它具有一定的优先级。例如权重5和C应当具有大于2022年6月的日期,并且其具有权重10的较高优先级。如何编写es查询来执行此操作
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 }
r1zk6ea12#
您可以提高查询效率。请查看以下链接:Elasticsearch 8.4Elasticsearch 7.17我希望这有助于构造您的查询。
2条答案
按热度按时间hfsqlsce1#
这是您的查询。请根据您的数据进行测试,并检查此查询是否满足您的要求。
r1zk6ea12#
您可以提高查询效率。请查看以下链接:
Elasticsearch 8.4
Elasticsearch 7.17
我希望这有助于构造您的查询。