Elasticsearch:几个有序和有限查询的联合

时间:2016-03-17 06:53:08

标签: elasticsearch

我需要执行两个查询,获取这两个查询的并集,然后排序并限制组合结果。

查询只是术语查询:

{
  "query": {
    "term": { "a.field": "A" }
  },
  "sort": [
     { "another.field": {"order": "desc"}}
  ],
  "size": 25
}

我查看了dis_max查询,但查询无法单独排序和限制。

等效的SQL将是:

select * from (
  (select * from my_table where a_field="A" order by another_field desc limit 25)
  union
  (select * from my_table where a_field="B" order by another_field desc limit 25)
) t order by yet_another_field limit 25;

此查询的另一部分在弹性搜索中比在关系数据库中更快。这就是为什么我希望看到这在弹性搜索中起作用。有可能吗?

修改

使用带有“A”和“B”两个值的术语查询不是一个选项。这是因为当按“another.field”排序时,没有“B”文档可以进入结果集,以便稍后通过“yet_another_field”进行排序。

1 个答案:

答案 0 :(得分:0)

您只需使用terms query

即可
{
  "query": {
    "terms": { "a.field": ["A","B"] }
  },
  "sort": [
     { "another.field": {"order": "desc"}}
  ],
  "size": 25
}

查询是:来自Documents的25 resultsa.field is either A or B的值按another.field降序排列