【问题标题】:Ranged Query with ElasticSearch使用 ElasticSearch 进行范围查询
【发布时间】:2015-03-31 18:41:15
【问题描述】:

我正在使用 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 之间的文档。

【问题讨论】:

    标签: elasticsearch


    【解决方案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"
    }
        } ]
      }
    }
    

    【讨论】:

    • 谢谢,事实是,我已经尝试过多次,但我从未尝试删除文档并再次插入它,我不断更新同一个对象,将持续时间字段更改为整数,但它从来没有工作,但是,删除我的旧文档并再次索引它使范围查询按预期工作。
    • 很高兴它有效!您必须删除文档的原因是,如果没有指定映射,当您第一次索引时,elastic 会自动为您的文档创建映射。然后它猜测要用于文档字段的类型。在这种情况下,它决定使用字符串来存储持续时间。仅当您删除索引时,此自动创建的映射也会被删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多