我正在寻找一种方法来查找具有特定二进制字段的文档数量"未设置"在映射索引中。但是,标准" Exists"查询似乎不起作用。例如:
start / wait javacpl.exe

查询:
{
"some-index": {
"mappings": {
"some-type": {
"properties": {
"data": {
"type": "binary"
}
}
}
}
}
}
POST http://.../some-index/some-type/_search?size=1

无论如何,上面的查询都会返回0结果。我的猜测是因为Elasticsearch默认情况下不会在源代码中存储二进制字段,并且" Exists"查询只查找源。
是否有使用Exists查询的替代方法,理想情况下不在映射中使用额外的布尔字段?
答案 0 :(得分:1)
以下是否符合您的要求...我正在创建一个模板,其中field1设置为二进制类型,然后使用field2(我没有打扰定义)索引文档然后我正在搜索没有文档的文档FIELD1。您可以在Kibana的开发控制台中运行它们
PUT _template\binary
{
"template": "binary",
"mappings": {
"binary": {
"properties": {
"field1": {
"type": "binary"
}
}
}
}}
PUT /binary/type/1
{
"field2":"abc"
}
GET binary/_search
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "field1"
}
}
}
}
}
那应该返回你刚刚索引的文档...如果你把它改成以下,它不应该返回任何东西,因为field2存在!
GET binary/_search
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "field2"
}
}
}
}
}