elasticsearch 如何查询空字段或特定值
我正在尝试编写一个查询以获得以下结果:elasticsearch 如何查询空字段或特定值,elasticsearch,kibana,elasticsearch,Kibana,我正在尝试编写一个查询以获得以下结果: field1: value1 AND field2: value2 OR "" (empty) 我尝试了以下操作,但它总是返回空结果: { "_source": ["field1", "field2"], "query": { "bool": { "must": [ {"match": { "field1": "value1" }}, { "bool": {
field1: value1 AND
field2: value2 OR "" (empty)
我尝试了以下操作,但它总是返回空结果:
{
"_source": ["field1", "field2"],
"query": {
"bool": {
"must": [
{"match": { "field1": "value1" }},
{
"bool": {
"should": [
{
"match": {
"field2": "value2"
}
}
],
"must_not": [
{
"exists": { "field": "field2" }
}
]
}
}
]
}
}
}
我认为我提出了一个自相矛盾的问题。这看起来非常复杂 尝试使用queryStringQuery 尝试像这样重写您的查询
{
"_source": ["field1", "field2"],
"query": {
"query_string": {
"query": "field1:value1 AND (field2:value2 OR (!field2:*))"
}
}
}
如果仍要使用此格式
您使用了must_not子句,根据您的用例,该子句的含义如下
字段1:值1和
字段2:值2而不是“”(空)
你应该做的是
{
"_source": [
"field1",
"field2"
],
"query": {
"bool": {
"must": [
{
"match": {
"field1": "value1"
}
},
{
"bool": {
"should": [
{
"match": {
"field2": "value2"
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "field2"
}
}
]
}
}
]
}
}
]
}
}
}
但是,如果您想先分析查询中的术语(您在查询中已经完成了这项工作),那么使用queryString会更容易
因此,在本例中使用queryString或bool将是相同的,因为它完全匹配,所以我不会使用query\u字符串。匹配或术语应该同样好。但总的来说,这是一个很好的解决方案。@MrSimple谢谢。但在这个问题上,他使用的匹配查询也是全文查询,将进行分析。这就是我提出这个建议的原因。谢谢@MrSimple和Gaurav Arya。事实上,我还不确定该选哪一个,精确匹配还是全文。我两个都试试。试着根据你的用例来思考。全文查询首先分析搜索字符串,然后搜索生成的标记。精确匹配查询按原样搜索搜索字符串。您所做的是一个全文查询。以下是指向它的链接。全文->术语级别->在本例中,不存在查看整个字段是否存在。。不仅仅是字段是空的。我也有同样的问题。。。不幸的是,这个“exists”并没有返回空字符串文档。我认为你犯了一个逻辑错误,你必须和不应该在同一级别上。必须不应该在
应该[{…}下,布尔:{必须不:[…]}]