elasticsearch,Search,Text,elasticsearch" /> elasticsearch,Search,Text,elasticsearch" />

如何使用ElasticSearch查找文本中的数字范围

如何使用ElasticSearch查找文本中的数字范围,search,text,elasticsearch,Search,Text,elasticsearch,我一直在网上阅读,试图找出如何使用弹性搜索在一段文本中找到一个数字范围。但是我没有运气 这里有一个例子,假设我有下面的一组文档,请注意文档并没有拆分为多个字段,它只是一个文本块 文件1{ 我有7本书 } 文档2{ 我有15本书 } 文件3{ 我有19本书 } 是否可以使用ElasticSearch形成一个查询来查找所有拥有10到20本书的人 谢谢 Rich在ES 1.5中,显然是为这类事情而设计的。我在这段代码中用ES 1.5设置了它,它似乎可以工作: 然而,我实际上并不需要这些来让它工作。根据

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

这里有一个例子,假设我有下面的一组文档,请注意文档并没有拆分为多个字段,它只是一个文本块

文件1{ 我有7本书 }

文档2{ 我有15本书 }

文件3{ 我有19本书 }

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

谢谢 Rich

在ES 1.5中,显然是为这类事情而设计的。我在这段代码中用ES 1.5设置了它,它似乎可以工作:

然而,我实际上并不需要这些来让它工作。根据空格将文本划分为标记,这样您就可以应用范围查询。过滤器对字段也起作用,它似乎可以执行您想要的操作:

我建立了一个简单的索引:

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"
            }
         }
      ]
   }
}
下面是第二个示例的代码:


感谢斯隆的详细回复。所以你是说这是开箱即用的?我曾使用JavaAPI1.5尝试过这一点,但没有成功。今晚我将再试一次。一旦我确认你的答案有效,我会把它标记为正确的。再次感谢。我没有尝试使用Java,我只是在启用CORS的本地ES实例上运行了sense链接中的代码片段,并且成功了。经过测试,它似乎工作得很好,谢谢。不过,我确实注意到了其他问题。我将查询更改为gt:10-这没有产生我预期的结果。