我正在尝试使用elasticsearch
执行过滤器,并且遇到语法错误,我似乎无法纠正。我测试了各个类,它们似乎工作正常。我究竟做错了什么?
这里的目的是找到满足三个同时条件的文档:(field1 == VAL1)
,(field2 == VAL2)
和((field3 == VAL3) || (field3 == VAL4))
。
我得到的信息是:
"嵌套:QueryParsingException [[xxxx]无法解析];嵌套: JsonParseException [意外的字符(':'(代码58)):期待 逗号分隔ARRAY条目\ n在[来源:[B @ 1acfee60;行:13, 专栏:26]]; }]""状态" 400}"
谢谢!
curl -XGET 'localhost:9200/xxxx/yyyy/_search' -d '
{
"query":
{
"filtered":
{
"filter":
{
"and":
[
{ "term": { "field1":"VAL1" } },
{ "term": { "field2":"VAL2" } },
"or":
[
{ "term": { "field3":"VAL3" } },
{ "term": { "field3":"VAL4" } }
]
]
}
}
}
}
'
感谢Paige Cook,语法错误现在消失了(见下文)。但是过滤器仍然与文档不匹配。我已经测试了"和"条款和"或"条款分开,他们都工作。我很困惑。
curl -XGET 'localhost:9200/xxxx/users/_search' -d '
{
"query":
{
"filtered":
{
"filter":
{
"and":
[
{ "term": { "field1":"VAL1" } },
{ "term": { "field2":"VAL2" } }
],
"or":
[
{ "term": { "field3":"VAL3" } },
{ "term": { "field3":"VAL4" } }
]
}
}
}
}
'
非常感谢Geert-Jan。最后的工作示例是:
curl -XGET 'localhost:9200/xxxx/yyyy/_search' -d '
{
"query":
{
"filtered":
{
"filter":
{
"and":
[
{ "term": { "field1":"VAL1" } },
{ "term": { "field2":"VAL2" } },
{
"or":
[
{ "term": { "field3":"VAL3" } },
{ "term": { "field3":"VAL4" } }
]
}
]
}
}
}
}
'
答案 0 :(得分:2)
基本过滤器在这种情况下只能包含1个过滤器and
。在该复合过滤器中,您应该有2个基本过滤器(term
})和复合过滤器or
。
这是(未经测试)
curl -XGET 'localhost:9200/xxxx/users/_search' -d '
{
"query":
{
"filtered":
{
"filter":
{
"and":
[
{ "term": { "field1":"VAL1" } },
{ "term": { "field2":"VAL2" } },
{
"or":
[
{ "term": { "field3":"VAL3" } },
{ "term": { "field3":"VAL4" } }
]
}
]
}
}
}
}
答案 1 :(得分:1)
根据您在上面发布的json查询,您在],
条目之后和之前错过了"or:"
。 "and"
和"or"
数组需要单独定义。
试试这个:
curl -XGET 'localhost:9200/xxxx/yyyy/_search' -d '
{
"query":
{
"filtered":
{
"filter":
{
"and":
[
{ "term": { "field1":"VAL1" } },
{ "term": { "field2":"VAL2" } }
],
"or":
[
{ "term": { "field3":"VAL3" } },
{ "term": { "field3":"VAL4" } }
]
]
}
}
}
}