ElasticSearch中的范围查询(没有正文的GET)

时间:2013-02-12 17:47:13

标签: json elasticsearch

关于弹性搜索的非常基本的问题,文档没有很清楚地回答(因为它们似乎涉及许多高级细节但却错过了基本细节!)。

示例:范围查询

http://www.elasticsearch.org/guide/reference/query-dsl/range-query.html

不知道如何通过搜索端点来表示范围?

如果是,那么如何通过查询字符串来完成?我的意思是,我想做一个GET,而不是一个POST(因为它是一个查询,而不是一个插入/修改)。但是,GET请求的文档没有说明如何在Range示例中使用JSON:

http://www.elasticsearch.org/guide/reference/api/search/uri-request.html

我错过了什么?

由于

3 个答案:

答案 0 :(得分:14)

使用Lucene query syntax

curl -X GET 'http://localhost:9200/my_index/_search?q=my_field:[0+TO+25]&pretty'

答案 1 :(得分:8)

我们假设我们有一个索引

curl -XPUT localhost:9200/test

和一些文件

curl -XPUT localhost:9200/test/range/1 -d '{"age": 9}'
curl -XPUT localhost:9200/test/range/2 -d '{"age": 12}'
curl -XPUT localhost:9200/test/range/3 -d '{"age": 16}'

现在我们可以通过

在一定范围内查询这些文档
curl -XGET 'http://localhost:9200/test/range/_search?pretty=true' -d '
{
    "query" : {
        "range" : {
            "age" : { 
                "from" : "10", 
                "to" : "20", 
                "include_lower" : true,
                "include_upper": true
            }
        }
    }
}
'

这将返回文件2和3。

我不确定是否有办法通过URI request执行这类复杂查询。

编辑:感谢karmi,这里是没有JSON请求的解决方案:

curl -XGET --globoff 'localhost:9200/test/range/_search?q=age:["10"+TO+"20"]&pretty=true'

答案 2 :(得分:0)

感谢@javanna回复自己:

在搜索文档的RequestBody部分:

http://www.elasticsearch.org/guide/reference/api/search/request-body.html

最后,它说:

  

搜索请求的其余部分应该在正文中传递。正文内容也可以作为名为 source 的REST参数传递。

所以我想我需要使用source属性的搜索端点来传递json。