g.l*_*lou 8 lucene curl elasticsearch
让我们在Elasticsearch中注入一些数据
curl -XPUT 'localhost:9200/customer/external/1' -d '{ "author": "John", "published_from":"2016-08-03" }'
curl -XPUT 'localhost:9200/customer/external/2' -d '{ "author": "Jeanne", "published_from":"2016-08-03" }'
curl -XPUT 'localhost:9200/customer/external/3' -d '{ "author": "Jean", "published_from":"2016-08-05" }'
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用published_from = 2016-08-03和author = John查询文档.我试着用这个curl命令做到这一点:
curl -g "localhost:9200/customer/external/_search?pretty&filter_path=hits.hits._source.author&q=+author:John+published_from:2016-08-03"
Run Code Online (Sandbox Code Playgroud)
然而,输出显示珍妮
{
"hits" : {
"hits" : [
{
"_source" : {
"author" : "John"
}
},
{
"_source" : {
"author" : "Jeanne"
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试这个curl命令时:
curl "localhost:9200/customer/external/_search?pretty&filter_path=hits.hits._source.author&q=%2Bauthor%3AJohn+%2Bpublished_from%3A2016-08-03"
Run Code Online (Sandbox Code Playgroud)
输出正是我想要的.
{
"hits" : {
"hits" : [
{
"_source" : {
"author" : "John"
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
为什么第一个命令没有按预期工作?
第一个 URL 中的+标志:
...&q=+author:John+published_from:2016-08-03
Run Code Online (Sandbox Code Playgroud)
根据百分比编码规则(在服务器端)解释为空格。空格通常被编码为%20,但由于历史原因,+也是空格字符的有效编码。
这意味着 ElasticSearch 获取的查询字符串如下所示:
author:John published_from:2016-08-03
Run Code Online (Sandbox Code Playgroud)
根据查询字符串语法,它将查找任何包含一个或多个author:John或的文档published_from:2016-08-03。
当您正确编码 Elastic 的+运算符(在第二个 URL 中)时,收到的查询为:
+author:John +published_from:2016-08-03
Run Code Online (Sandbox Code Playgroud)
请注意+被解码为空格和。%2B+
curl为了避免对查询进行手动(百分比)编码,您可以使用该--data-urlencode选项并提供原始key=value对。
例如:
curl -G 'localhost:9200/customer/external/_search?pretty&filter_path=hits.hits._source.author' --data-urlencode 'q=+author:John +published_from:2016-08-03'
Run Code Online (Sandbox Code Playgroud)
这里curl将把 URL 中的查询参数与-d/--data-urlencode选项提供的查询参数结合起来。我们需要-G强制GET请求,因为-d/--data-urlencode默认为POST请求。
| 归档时间: |
|
| 查看次数: |
936 次 |
| 最近记录: |