弹性搜索“没有"询问 [英] elasticsearch "having not" query

查看:39
本文介绍了弹性搜索“没有"询问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

某些文档具有类别字段..其中一些文档具有类别字段,其值等于"-1".我需要一个查询返回的文档,其中包含类别字段且不等于-1".

Some documents has category fields.. Some of these docs has category fields its value equals to "-1". I need a query return documents which have category fields and "not equal to -1".

我尝试过:

GET webproxylog/_search
{
  "query": {
    "filtered": {

      "filter": {
        "not":{
          "filter": {"and": {
            "filters": [
              {"term": {
                "category": "-1"
              }

              },
              {
                "missing": {
                "field": "category"
                }
              }
            ]
          }}
        }
      }
    }
  }
}

但是不行..返回的文档没有类别字段"

But not work.. returns docs not have "category field"

编辑

映射:

    {
   "webproxylog": {
      "mappings": {
         "accesslog": {
            "properties": {
               "category": {
                  "type": "string",
                  "index": "not_analyzed"
               },
               "clientip": {
                  "type": "string",
                  "index": "not_analyzed"
               },
               "clientmac": {
                  "type": "string",
                  "index": "not_analyzed"
               },
               "clientname": {
                  "type": "string",
                  "index": "not_analyzed"
               },
               "duration": {
                  "type": "long"
               },
               "filetype": {
                  "type": "string",
                  "index": "not_analyzed"
               },
               "hierarchycode": {
                  "type": "string",
                  "index": "not_analyzed"
               },
               "loggingdate": {
                  "type": "date",
                  "format": "dateOptionalTime"
               },
               "reqmethod": {
                  "type": "string",
                  "index": "not_analyzed"
               },
               "respsize": {
                  "type": "long"
               },
               "resultcode": {
                  "type": "string",
                  "index": "not_analyzed"
               },
               "url": {
                  "type": "string",
                  "analyzer": "slash_analyzer"
               },
               "user": {
                  "type": "string",
                  "index": "not_analyzed"
               }
            }
         }
      }
   }
}

推荐答案

如果您的 category 字段为 string 且默认情况下已进行分析,则您的 -1将被索引为 1 (带符号).

If your category field is string and is analyzed by default, then your -1 will be indexed as 1 (stripping the minus sign).

您将需要对该字段进行 not_analyzed 或添加一个未分析的子字段(如下所述).

You will need that field to be not_analyzed or to add a sub-field which is not analyzed (as my solution below).

类似这样的东西:

DELETE test

PUT /test
{
  "mappings": {
    "test": {
      "properties": {
        "category": {
          "type": "string",
          "fields": {
            "notAnalyzed": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
  }
}

POST /test/test/1
{"category": "-1"}
POST /test/test/2
{"category": "2"}
POST /test/test/3
{"category": "3"}
POST /test/test/4
{"category": "4"}
POST /test/test/5
{"category2": "-1"}

GET /test/test/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "term": {
            "category.notAnalyzed": {
              "value": "-1"
            }
          }
        },
        {
          "filtered": {
            "filter": {
              "missing": {
                "field": "category"
              }
            }
          }
        }
      ]
    }
  }
}

这篇关于弹性搜索“没有"询问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆