使用ElasticSearch进行远程查询

时间:2015-03-31 09:55:32

标签: elasticsearch

我正在使用ElasticSearch进行测试,我遇到远程查询问题。 请考虑我插入的以下文档:

curl -XPUT 'localhost:9200/test/test/test?pretty' -d '
{
  "name": "John Doe",
  "duration" : "10",
  "state" : "unknown"
}'

现在我正在尝试进行远程查询,捕获持续时间介于5到15之间的所有文档:

curl -XPOST 'localhost:9200/test/_search?pretty' -d '
{
  "query": {
    "range": {
      "duration": {
        "gte": "5",
        "lte": "15"
      }
    }
  }
}'

如果我像这样运行查询,则不会返回命中:

curl -XPOST 'localhost:9200/test/_search?pretty' -d '
{
  "query": {
    "range": {
      "duration": {
        "gte": "10"
      }
    }
  }
}'

它返回我之前插入的文档。如何查询ElasticSearch以获取持续时间值介于5和15之间的文档。

1 个答案:

答案 0 :(得分:1)

问题是您将值索引为字符串。这会导致范围查询无效。尝试索引和查询如下:

curl -XPUT 'localhost:9200/test/test/test?pretty' -d '
{
  "name": "John Doe",
  "duration" : 10,
  "state" : "unknown"
}'

curl -XPOST 'localhost:9200/test/_search?pretty' -d '
{
  "query": {
    "range": {
      "duration": {
        "gte": 5,
        "lte": 15
      }
    }
  }
}'

这将产生以下结果:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "test",
      "_type" : "test",
      "_id" : "test",
      "_score" : 1.0,
      "_source":
{
  "name": "John Doe",
  "duration" : 10,
  "state" : "unknown"
}
    } ]
  }
}