问题描述
我希望在具有不同值的同一字段上添加过滤器。 基本上我想获取带有 mode1 或 mode2 类型过滤器的文档。以下查询有问题。
{
"index": "abcdef*","from": 0,"size": 50,"body": {
"query": {
"bool": {
"must": [{ "term": { "id": "123455" } }],"filter": [{ "term": { "mode": "mode1" } },{ "term": { "mode": "mode2" } }]
}
}
}
}
解决方法
您需要将 bool/should
子句与 filter
子句一起使用
{
"query": {
"bool": {
"must": [
{
"term": {
"id": "123455"
}
}
],"filter": [
{
"bool": {
"should": [
{
"term": {
"mode": "mode1"
}
},{
"term": {
"mode": "mode2"
}
}
]
}
}
]
}
}
}
,
您可以尝试使用嵌套的 bool 查询并应用类似于 OR 查询的 should 子句。
ItemIdentifierType
,
最好将 bool/should
移到顶层并使用 bool/filter
而不是 bool/must
作为词条查询(因为您不需要相关性,只需回答是/否即可id
字段上的约束):
{
"query": {
"bool": {
"minimum_should_match": 1,"should": [
{
"term": {
"mode": "mode1"
}
},{
"term": {
"mode": "mode2"
}
}
],"filter": [
{
"term": {
"id": "123455"
}
}
]
}
}
}
或者甚至更好,只需利用 terms
查询,它使查询变得尽可能简单:
{
"query": {
"bool": {
"filter": [
{
"term": {
"id": "123455"
}
},{
"terms": {
"mode": ["mode1","mode2"]
}
}
]
}
}
}