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

kno*_*cte 12 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

我错过了什么?

谢谢

kar*_*rmi 14

使用Lucene查询语法:

curl -X GET 'http://localhost:9200/my_index/_search?q=my_field:[0+TO+25]&pretty'
Run Code Online (Sandbox Code Playgroud)


Tho*_*ten 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}'
Run Code Online (Sandbox Code Playgroud)

现在我们可以通过查询一定范围内的这些文档

curl -XGET 'http://localhost:9200/test/range/_search?pretty=true' -d '
{
    "query" : {
        "range" : {
            "age" : { 
                "from" : "10", 
                "to" : "20", 
                "include_lower" : true,
                "include_upper": true
            }
        }
    }
}
'
Run Code Online (Sandbox Code Playgroud)

这将返回文档2和3.

不过,我不确定是否有办法通过URI请求执行这些复杂的查询.

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

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


kno*_*cte 0

感谢@javanna 回复我自己:

在搜索文档的 RequestBody 部分中:

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

最后,它说:

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

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