我需要执行两个查询,获取这两个查询的并集,然后排序并限制组合结果。
查询只是术语查询:
{
"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”进行排序。
答案 0 :(得分:0)
您只需使用terms query
即可{
"query": {
"terms": { "a.field": ["A","B"] }
},
"sort": [
{ "another.field": {"order": "desc"}}
],
"size": 25
}
查询是:来自Documents的25 results
,a.field is either A or B
的值按another.field
降序排列