12

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

示例:范围查询

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

我错过了什么?

谢谢

4

3 回答 3

15

使用Lucene 查询语法

curl -X GET 'http://localhost:9200/my_index/_search?q=my_field:[0+TO+25]&pretty'
于 2013-02-13T08:25:17.207 回答
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'

于 2013-02-12T18:20:58.453 回答
0

感谢@javanna 回复我自己:

在搜索文档的 RequestBody 部分:

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

最后,它说:

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

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

于 2013-02-16T03:20:26.827 回答