The Elasticsearch Query DSL使我可以查找存在某些字段的文档:
GET /_search
{
"query": {
"exists" : { "field" : "firstname" }
}
}
但是似乎只有一个字段存在,如何检查2个字段是否存在?例如,我想查找同时具有firstname
和lastname
字段的用户。
答案 0 :(得分:1)
要创建具有多个条件的查询,应在elasticsearch中使用bool子句。请阅读here
尝试:
GET /_search
{
"query" : {
"bool" : {
"must": [{
"exists" : { "field" : "firstname" },
"exists" : { "field" : "lastname" }
}]
}
}
}
答案 1 :(得分:1)
您可以通过将filter
子句或must
子句中存在的两个包裹起来,如下所示:
{
"query": {
"bool": {
"filter": [
{
"exists": {
"field": "firstname"
}
},
{
"exists": {
"field": "lastname"
}
}
]
}
}
}
在filter
子句中使用将提供与must
子句相同的输出。唯一的区别是带过滤器的那个不会计算分数,而带过滤器的那个不会计算分数。根据您的需要使用。有关更多信息,请阅读this。
必须使用
:{
"query": {
"bool": {
"must": [
{
"exists": {
"field": "firstname"
}
},
{
"exists": {
"field": "lastname"
}
}
]
}
}
}