Elasticsearch query_string和term组合不起作用

时间:2017-01-29 13:07:20

标签: elasticsearch

我编写了以下查询,以便搜索have "test" in "message" fieldtheir length is between 20 and 200以及none of "user*" are "admin""user3" to "user20" are NULL所有sorted by "date"的文档。

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "test",
            "default_field": "message"
          }
        },
        {
          "term": {
            "user20": "NULL"
          }
        },
        {
          "term": {
            "user19": "NULL"
          }
        },
        {
          "term": {
            "user18": "NULL"
          }
        },
        {
          "term": {
            "user17": "NULL"
          }
        },
        {
          "term": {
            "user16": "NULL"
          }
        },
        {
          "term": {
            "user15": "NULL"
          }
        },
        {
          "term": {
            "user14": "NULL"
          }
        },
        {
          "term": {
            "user13": "NULL"
          }
        },
        {
          "term": {
            "user12": "NULL"
          }
        },
        {
          "term": {
            "user11": "NULL"
          }
        },
        {
          "term": {
            "user10": "NULL"
          }
        },
        {
          "term": {
            "user9": "NULL"
          }
        },
        {
          "term": {
            "user8": "NULL"
          }
        },
        {
          "term": {
            "user7": "NULL"
          }
        },
        {
          "term": {
            "user6": "NULL"
          }
        },
        {
          "term": {
            "user5": "NULL"
          }
        },
        {
          "term": {
            "user4": "NULL"
          }
        },
        {
          "term": {
            "user3": "NULL"
          }
        }
      ],
      "filter": [
        {
          "range": {
            "length": {
              "gte": 20,
              "lte": 200
            }
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "user1": "admin"
          }
        },
        {
          "term": {
            "user2": "admin"
          }
        },
        {
          "term": {
            "user3": "admin"
          }
        },
        {
          "term": {
            "user4": "admin"
          }
        },
        {
          "term": {
            "user5": "admin"
          }
        },
        {
          "term": {
            "user6": "admin"
          }
        },
        {
          "term": {
            "user7": "admin"
          }
        },
        {
          "term": {
            "user8": "admin"
          }
        },
        {
          "term": {
            "user9": "admin"
          }
        },
        {
          "term": {
            "user10": "admin"
          }
        },
        {
          "term": {
            "user11": "admin"
          }
        },
        {
          "term": {
            "user12": "admin"
          }
        },
        {
          "term": {
            "user13": "admin"
          }
        },
        {
          "term": {
            "user14": "admin"
          }
        },
        {
          "term": {
            "user15": "admin"
          }
        },
        {
          "term": {
            "user16": "admin"
          }
        },
        {
          "term": {
            "user17": "admin"
          }
        },
        {
          "term": {
            "user18": "admin"
          }
        },
        {
          "term": {
            "user19": "admin"
          }
        },
        {
          "term": {
            "user20": "admin"
          }
        }
      ]
    }
  },
  "sort": [
    {
      "date": {
        "order": "desc"
      }
    }
  ]
}

没有"user3" to "user20" are NULL条件,查询工作正常,即如果我擦除查询中的所有相应部分。但是,当我再次添加它时,我得到0结果。我确信我的文件符合标准。

有什么问题?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

问题是:如何在映射中定义空值?正如您在查询中所写的那样,只有在映射中设置“null_value”:“NULL”时才会起作用。其他方式您可以使用“存在”或“缺失”查询,例如:“exists”:{“field”:“user20”} 你能提供文件的例子吗?