Elasticsearch:搜索布尔字段

时间:2018-08-13 15:43:03

标签: elasticsearch

我在Elasticsearch集群中有几个文档,其中的字段isInFight拥有布尔值。映射已正确设置(已经对此进行了双重检查)为布尔值。

当我使用以下命令进行搜索时

 curl -XGET localhost:9200/default/_search --data '{"query": {"term": {"isInFight": true}}}'

我得到的文档返回的字段为true和false。将搜索查询中的值更改为false,根本不会返回任何文档。

在我看来,术语查询一词是检查该字段是否存在,而不是其值。我在互联网上发现的所有内容都表明此查询是解决之道。

我在这里错过了什么吗?是否存在与此有关的已知错误?

有问题的Elasticsearch是版本5.5.2和ubuntu 6.6.0服务器上的Lucene版本16.04

2 个答案:

答案 0 :(得分:0)

这对我有用:

{
  "query": {
    "bool": {
      "must": {
        "term": {
          "isInFight": true
        }
      }
    }
  }
}

答案 1 :(得分:0)

在我的本地Elasticsearch中尝试此操作,但未发现问题

POST test_index/doc
{
  "id": 1,
  "isInFight": false
}

POST test_index/doc
{
  "id": 2,
  "isInFight": true
}

POST test_index/doc
{
  "id": 3,
  "isInFight": true
}

GET test_index/doc/_search
{
  "query": {
    "term": { "isInFight": false }
  }
}

得到了这个结果

{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.2876821,
    "hits": [
      {
        "_index": "test_index",
        "_type": "doc",
        "_id": "AWU2Dxm7GR2l1TPuyKhN",
        "_score": 0.2876821,
        "_source": {
          "id": 1,
          "isInFight": false
        }
      }
    ]
  }
}