应找到以下文件:
matches query 'my text' AND (has not field OR field with value)
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
GET /myIndex/_search
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "my text"
}
},
{
}
],
"filter": {
"bool": {
"must_not": {
"exists": {
"field": "myField"
}
},
"must": {
"terms": {
"myField": [
"myValue"
]
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它应该(但不是)工作liek说:
must和filter部分must按查询选择must andmust_not`组合的 bool但这就像must与must_not通过AND子句结合使用一样。例如,当我删除“must”或“must_not”查询时。
如何更改查询以通过OR子句将“must”与“must_not”结合起来?
Elasticsearch 版本是 5.3.2
在 Elasticsearch 7.X 上,您可以简单地执行以下操作:
{
"query": {
"bool": {
"must": [
{"match": {"field1": {"query": "Hero"}}}
],
"must_not": [
{"terms":{"field3":["Batman"]}},
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
您需要bool filter在must和must_not条款之间多加一个。
您还应该考虑您的myField字段。如果它被定义为文本或关键字。使用 elasticsearch 5.6.1 测试,以下查询有效:
{
"query": {
"bool": {
"must": [{
"query_string": {
"query": "this is a text content"
}
}],
"filter": {
"bool": {
"should" : [{
"bool" : {
"must_not": {
"exists": {
"field": "myField"
}
}
}
},
{
"bool" : {
"must": {
"terms": {
"myField.keyword": ["my field exists and has a value"]
}
}
}
}]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6998 次 |
| 最近记录: |