如何使用ElasticSearch在一段文本中找到数字范围

时间:2015-04-06 17:21:42

标签: search text elasticsearch

我一直在通过互联网阅读,试图找出如何使用弹性搜索在一段文本中找到数字范围。但是我没有运气。

这是一个例子,说我有以下文档集(请注意,文档不会分成多个字段,而只是一个文本块)。

DOC1 { msg:“我有7本书” }

DOC2 { msg:“我有15本书” }

doc3的{ msg:“我有19本书” }

是否可以使用ElasticSearch形成查询以查找拥有10到20本书籍的所有人?

由于 富

1 个答案:

答案 0 :(得分:0)

在ES 1.5中,keep_types token filter显然就是针对这种事情而设计的。我在这段代码中设置了它(使用ES 1.5),它似乎有效:

http://sense.qbox.io/gist/b2c86b748d0c33957df1dcb90a3b405b0a4ca646

然而,我实际上并不需要这样才能让它发挥作用。 standard analyzer基于空格将文本划分为标记,因此您可以对字段应用range查询(过滤器也可以),它似乎可以执行您想要的操作:

我设置了一个简单的索引:

DELETE /test_index

PUT /test_index

POST /test_index/doc/_bulk
{ "index": { "_id": 1 }}
{ "msg": "I have 7 books" }
{ "index": { "_id": 2 }}
{ "msg": "I have 15 books" }
{ "index": { "_id": 3 }}
{ "msg": "I have 19 books" }

然后使用范围查询:

POST /test_index/_search
{
    "query": {
        "range": {
           "msg": {
              "from": 10,
              "to": 20
           }
        }
    }
}
...
{
   "took": 3,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 2,
      "max_score": 1,
      "hits": [
         {
            "_index": "test_index",
            "_type": "doc",
            "_id": "2",
            "_score": 1,
            "_source": {
               "msg": "I have 15 books"
            }
         },
         {
            "_index": "test_index",
            "_type": "doc",
            "_id": "3",
            "_score": 1,
            "_source": {
               "msg": "I have 19 books"
            }
         }
      ]
   }
}

以下是第二个示例的代码:

http://sense.qbox.io/gist/0979803673efb5b7ff063c257efd82617a93bd06