我不太清楚为什么术语过滤器"term": {"language": "Austrian"}
会导致弹性搜索解析异常。
令人惊讶的是,如果我删除query_string查询,它是有效的。
如果它不在那里,我会把"term": {"language": "Austrian"}
过滤器放在哪里?
{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"terms": {
"status_type": [
"1",
"2",
"7"
]
}
}
]
}
},
"filter": {
"query": {
"query_string": {
"fields": [
[
"name",
"message"
]
],
"query": "Arnold AND Schwarz"
}
},
"term": { <-- Causes parse exception
"language": "Austrian"
}
}
}
},
"sort": [
{
"total": {
"order": "desc"
}
}
]
}
答案 0 :(得分:1)
在filter
内,如果您有多个约束,则需要bool
filter,这是您的情况,因为您有query
filter和term
filter。所以正确的做法是这样的:
{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"terms": {
"status_type": [
"1",
"2",
"7"
]
}
}
]
}
},
"filter": {
"bool": { <---- add this
"must": [ <---- and this
{
"query": {
"query_string": {
"fields": [
[
"name",
"message"
]
],
"query": "Arnold AND Schwarz"
}
}
},
{
"term": {
"language": "Austrian"
}
}
]
}
}
}
},
"sort": [
{
"total": {
"order": "desc"
}
}
]
}
但是,如果我可以添加一些内容,我会稍微改写您的查询并将query_string
移到query
部分,将status_type
term
移到在filter
部分,它会感觉更“自然”。此外,如果您只有一个约束,则在query
部分中您不需要bool/must
。
{
"query": {
"filtered": {
"query": {
"query_string": {
"fields": [
[
"name",
"message"
]
],
"query": "Arnold AND Schwarz"
}
},
"filter": {
"bool": {
"must": [
{
"terms": {
"status_type": [
"1",
"2",
"7"
]
}
},
{
"term": {
"language": "Austrian"
}
}
]
}
}
}
},
"sort": [
{
"total": {
"order": "desc"
}
}
]
}