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条款和must_not条款的文档。然后,我在过滤后的集中搜索所有包含query_term的文档。
(我首先进行过滤以稍微提高搜索速度)
最佳答案
您的问题在示例中:
...
"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"
}
}
]
}
请注意,我正在使用
term
查询,但是您可以自由使用任何类型的查询。在Elasticsearch 2.x +中,您应该将其编写为纯bool
查询,而不是filtered
查询:{
"query": {
"bool": {
"must": [
{
"query_string" : {
"query" : "query_term"
}
}
],
"must_not": [
{
"term" : {
"my_field" : "must_not_term"
}
},
{
"term" : {
"my_field" : "must_not_term2"
}
}
],
"filter": [
{
"term" : {
"my_field" : "must_term1"
}
},
{
"term" : {
"my_field" : "must_term2"
}
}
]
}
}
}
关于elasticsearch - 过滤查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37999703/