gpt4 book ai didi

curl - AND 在 elasticsearch 中使用 curl 进行查询

转载 作者:行者123 更新时间:2023-11-29 02:46:52 25 4
gpt4 key购买 nike

让我们在 Elasticsearch 中注入(inject)一些数据

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" }'

我正在尝试查询 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"

然而,输出显示珍妮

{
"hits" : {
"hits" : [
{
"_source" : {
"author" : "John"
}
},
{
"_source" : {
"author" : "Jeanne"
}
}
]
}
}

当我尝试这个 curl 命令时:

curl "localhost:9200/customer/external/_search?pretty&filter_path=hits.hits._source.author&q=%2Bauthor%3AJohn+%2Bpublished_from%3A2016-08-03"

输出正是我想要的。

{
"hits" : {
"hits" : [
{
"_source" : {
"author" : "John"
}
}
]
}
}

为什么第一个命令没有按预期工作?

最佳答案

第一个 URL 中的 + 符号:

...&q=+author:John+published_from:2016-08-03

根据 percent-encoding 被解释(在服务器端)规则为空格。空格通常编码为%20,但由于历史原因,+也是空格字符的有效编码。

这意味着 ElasticSearch 获取的查询字符串如下所示:

author:John published_from:2016-08-03

根据 query string syntax , 它会找到包含一个或多个 author:Johnpublished_from:2016-08-03 的任何文档。

当您正确编码 Elastic 的 + 运算符(在第二个 URL 中)时,收到的查询是:

+author:John +published_from:2016-08-03

注意 + 被解码为空格 %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'

此处 curl 会将 URL 中的查询参数与 -d/--data-urlencode 选项提供的参数组合起来。我们需要 -G 来强制执行 GET 请求,因为 -d/--data-urlencode 默认为POST 请求。

关于curl - AND 在 elasticsearch 中使用 curl 进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46849253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com