Elasticsearch多query_string查询时按日期排序报错无法排序问题
问题根因
多query_string查询完全支持排序,你的报错和查询条件数量无关,是DSL结构配置错误导致的。
你当前提交的查询把sort参数放在了和index、size、body平级的请求顶层参数位置,但按照Elasticsearch的查询规范,sort属于body内部的顶层字段,需要和query同级放置。位置错误导致ES将整个sort配置对象误识别为待排序的字段名,所以抛出「No mapping found for [[object Object]] in order to sort on」的异常。
你之前仅使用单个query_string时能正常排序,是因为那时候的查询语句将sort正确放在了body内部,没有出现结构错误。
修正后的查询语句
{ index: "news", size: 100, from: 100, body: { query: { bool: { must: [ { query_string: { query: "(new york) or (big apple)", fields: ["title", "description"], }, }, { range: { created_by: { gte: "now-90d", lte: "now", }, }, }, ], }, }, // sort挪到body内部,和query同级 sort: [ { created_by: { order: "desc", format: "strict_date_optional_time_nanos", unmapped_type: "date", }, }, "_score", ], } }
内容的提问来源于stack exchange,提问作者neus
相关产品推荐
相关产品推荐

