GET dspdocs/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": ["must_term1", "must_term2"],
"must_not": ["must_not_term", "must_not_term2"]
}
},
"query": {
"match": {
"text": {
"query": "query_term",
"operator": "or"
}
}
}
}
}
}
我正在尝试执行上述查询,并收到以下错误:
"type": "query_parsing_exception",
"reason": "[_na] query malformed, must start with start_object",
我知道这意味着我的查询没有正确编写,或者我在某处搞砸了一些订单,但对于我的生活,我似乎无法弄清楚我哪里出错了
我基本上试图过滤掉所有不包含必须条款且包含must_not条款的文档。然后我在过滤集内搜索所有包含query_term的文档。
(我首先进行过滤以略微提高搜索速度)
答案 0 :(得分:3)
您的问题出在示例中:
<name>Application/Env</name>
<value>DEV</value>
<name>Application/ID</name>
<value>999</value>
<name>Application/Name</name>
<value>appname</value>
...
"bool": {
"must": ["must_term1", "must_term2"],
"must_not": ["must_not_term", "must_not_term2"]
}
},
...
和must
(以及must_not
和should
的数组)需要一个对象或一个数组物体。例如:
filter
请注意,我使用的是"bool": {
"must": [
{
"term" : {
"my_field" : "must_term1"
}
},
{
"term" : {
"my_field" : "must_term2"
}
}
],
"must_not": [
{
"term" : {
"my_field" : "must_not_term"
}
},
{
"term" : {
"my_field" : "must_not_term2"
}
}
]
}
查询,但您可以自由使用任何类型的查询。使用Elasticsearch 2.x +,您应该将其写为纯term
查询,而不是bool
查询:
filtered