Elasticsearch组对已合并的查询

时间:2017-08-15 23:12:37

标签: sorting elasticsearch grouping

我面临以下问题。我对索引中的特定记录组进行了一些排序查询,类似于下面的记录,其中term1匹配值因查询而异,而对于term2,它们对所有查询保持静态。 / p>

{
   "query": {
        "bool": {
            "must": {
                "terms": {
                    "term1": [ "val1", "val2" ]   
                }
            },
            "must_not": {
                "terms": {
                    "term2": [ "val3", "val4" ]   
                }
            }
        }
    },
    "sort": [
        { "sort_term": "desc" }
    ],
    "from": 0,
    "size": 10
}

现在,我正在单独执行所有这些查询,然后在代码中组合和混洗他们的结果,这可能是您可能知道的并不理想。我想知道是否有办法在ElasticSearch中组合这些查询,同时保持基于组的排序。

我想维护每个查询的排序顺序的原因是因为排序值不一致,我不希望不同组的结果被埋没在结果集中。

我能想到的唯一解决方案是以某种方式重新处理所有记录并根据给定组中所有记录的排序值计算相对排序值,但这些值会定期更改并且索引具有很多记录,所以这可能是矫枉过正。

任何想法都将不胜感激!

1 个答案:

答案 0 :(得分:0)

您可以在排序数组中使用多个术语。如果您将查询组合起来,我将首先按_type排序,这样可以防止混淆搜索结果。查询的排序字段应为:

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