elasticsearch,grouping,Sorting,elasticsearch,Grouping" /> elasticsearch,grouping,Sorting,elasticsearch,Grouping" />

Sorting Elasticsearch组排序组合查询

Sorting Elasticsearch组排序组合查询,sorting,elasticsearch,grouping,Sorting,elasticsearch,Grouping,我面临以下问题。我对索引中的一组特定记录进行了一些排序查询,类似于下面的查询,其中term1匹配值在每个查询中有所不同,而term2的匹配值在所有查询中都保持静态 { "query": { "bool": { "must": { "terms": { "term1": [ "val1", "val2" ] } },

我面临以下问题。我对索引中的一组特定记录进行了一些排序查询,类似于下面的查询,其中
term1
匹配值在每个查询中有所不同,而
term2
的匹配值在所有查询中都保持静态

{
   "query": {
        "bool": {
            "must": {
                "terms": {
                    "term1": [ "val1", "val2" ]   
                }
            },
            "must_not": {
                "terms": {
                    "term2": [ "val3", "val4" ]   
                }
            }
        }
    },
    "sort": [
        { "sort_term": "desc" }
    ],
    "from": 0,
    "size": 10
}
现在,我将分别执行所有这些查询,然后在代码中组合和洗牌它们的结果,正如您可能知道的那样,这并不理想。我想知道是否有办法在ElasticSearch中组合这些查询,同时维护基于组的排序

我希望维护每个查询的排序顺序的原因是,排序值不统一,并且我不希望来自不同组的结果隐藏在结果集中

我能想到的唯一解决方案是以某种方式重新处理所有记录,并根据给定组中所有记录的排序值计算相对排序值,但这些值变化非常有规律,索引中有大量记录,因此这可能是过分的


任何想法都将不胜感激

您可以在排序数组中使用多个术语。如果合并查询,我会首先按_类型排序,这样可以防止混淆搜索结果。查询的排序字段应如下所示:

"sort": [
    { "_type": "desc" },
    { "sort_term_query1": "desc" },
    { "sort_term_query2": "desc" },
],

可以在排序数组中使用多个术语。如果合并查询,我会首先按_类型排序,这样可以防止混淆搜索结果。查询的排序字段应如下所示:

"sort": [
    { "_type": "desc" },
    { "sort_term_query1": "desc" },
    { "sort_term_query2": "desc" },
],

我知道我可以使用多个排序项,但在这种情况下,我的所有查询都使用相同的排序项。我想做的是对每个布尔项单独排序,并混合结果。然后我不理解你的问题,不清楚最终结果应该如何排序。我知道我可以使用多个排序项,但在这种情况下,我所有的查询都使用相同的排序项。我想做的是对每个布尔项单独排序,并混合结果。然后我不理解你的问题,不清楚最终结果应该如何排序。