elasticsearch“没有”查询

时间:2015-10-08 12:15:47

标签: elasticsearch

某些文档具有类别字段。其中一些文档具有类别字段,其值等于“-1”。我需要一个查询返回文件,其中包含类别字段和“不等于-1”。

我试过了:

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

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

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

但不起作用..返回文档没有“类别字段”

修改

映射:

    {
   "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"
               }
            }
         }
      }
   }
}

1 个答案:

答案 0 :(得分:0)

如果您的category字段为string且默认情况下进行了分析,那么您的-1将被编入索引1(剥离minus符号)。

您需要将该字段设为not_analyzed或添加未分析的子字段(如下面的解决方案)。

这样的事情:

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"
              }
            }
          }
        }
      ]
    }
  }
}