elasticsearch - 如何编写 Elasticsearch DSL 多字段多词查询?
问题描述
我应该如何编写 Elasticsearch (6.6) DSL 查询以仅返回此示例池中的文档 Doc2 和 Doc3:
Doc1 { "Field1" : "Term1", "Field2" : "Term2" }
Doc2 { "Field1" : "Term6", "Field2" : "Term2" }
Doc3 { "Field1" : "Term6", "Field2" : "Term5" }
Doc4 { "Field1" : "Term3", "Field2" : "Term1" }
查询逻辑:(Field1 or Field2)不等于(Term1 or Term2 or Term3)
解决方案
假设Field1
andField2
是关键字的数据类型,您可以使用bool 查询的 should 和 must_not 子句与terms 查询来获得所需的结果。
查询将如下所示:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must_not": [
{
"terms": {
"Field1": [
"Term1",
"Term2",
"Term3"
]
}
}
]
}
},
{
"bool": {
"must_not": [
{
"terms": {
"Field2": [
"Term1",
"Term2",
"Term3"
]
}
}
]
}
}
]
}
}
}
推荐阅读
- spring-boot - Spring Boot:为执行器端点禁用 https
- java - Java用迷宫读取文本文件并获取所有可能的路径
- c# - 带有两个具有相似代码的 catch 子句的 Try-Catch 块
- python-3.x - Python中的Break语句中的语法错误 - 需要帮助
- angular - 在 NGRX 中任何动作调度后执行效果
- java - 使用 JSch 分别为各个提示提供输入
- typescript - 什么设置导致 Neovim 在打字稿枚举中的格式不一致?
- python - “未定义函数名称”
- objective-c - 为什么 AudioUnit 在带闪电插头的耳机下每帧收集 940 字节
- vulkan - Vulkan 管道衍生品