0
我正在寻找一种方法来查找在映射索引中具有某个二进制字段“未设置”的文档数量。但是,标准的“Exists”查询似乎不起作用。例如:Elasticsearch:在二进制字段上存在查询
{
"some-index": {
"mappings": {
"some-type": {
"properties": {
"data": {
"type": "binary"
}
}
}
}
}
}
查询: POST http://.../some-index/some-type/_search?size=1
{
"query":{
"exists":{
"field":"data"
}
}
}
上面的查询会不管是什么返回0的结果。我的猜测是这是因为Elasticsearch默认情况下不会在源代码中存储二进制字段,而“Exists”查询只查找源代码。
是否有替代使用Exists查询,理想情况下没有在映射中使用额外的布尔型字段?
感谢您的帮助。对于实际具有'field1'的文档,即当您查询{bool:{must:{exists:{field:“field1”}}}}?上次我尝试时,它不起作用。或者,正如在你的例子中,如果你把一个同时具有'field1'和'field2'的文档?我怀疑ES只是忽略“Exists”查询中的二进制字段。 – aaronqli
你是对的,如果你明确地试图搜索一个二进制字段弹性状态它不可搜索,但你想返回没有二进制字段集的文档,这可以使用'GET binary/type/_count { “查询”:{ “布尔”:{ “must_not”:{ “存在”:{ “字段”: “字段1”} } } } }'得到在索引文档的数量是很简单,所以你可以从另一个中减去一个? – greggers
这个查询(和_search)返回所有文档,无论是否设置了二进制字段:( – aaronqli