我正在寻找一种方法来查找映射索引中具有“未设置”某个二进制字段的文档数量。但是,标准的“存在”查询似乎不起作用。例:
{
"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查询的替代方法,理想情况下在映射中不使用额外的 bool(boolean) 字段?
最佳答案
以下操作是否可以满足您的需求?我正在创建一个将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"
}
}
}
}
}
关于elasticsearch - Elasticsearch:存在对二进制字段的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46718033/