gpt4 book ai didi

javascript - Elasticsearch:cURL 到 Ajax 请求

转载 作者:行者123 更新时间:2023-11-29 10:05:21 25 4
gpt4 key购买 nike

我正在使用 elasticsearch 的 Ajax 请求来获取搜索结果。最后,我找到了我必须去寻找的查询。 (这是 link 的后续问题)

这是 cURL 中的查询:

[~]$ curl -XGET 'localhost:9200/firebase/_search?pretty' -H 'Content-Type: application/json' -d'
> {"query": {"match": {"song": {"query": "i am in", "operator": "and"}}}}'

Result:

{
"took" : 286,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.8630463,
"hits" : [
{
"_index" : "firebase",
"_type" : "song",
"_id" : "0001",
"_score" : 0.8630463,
"_source" : {
"song" : "i am in california",
"song_name" : "hello",
"song_url" : "https://s3.ap-south-1.amazonaws.com/..."
}
}
]
}
}

这个查询给出了我需要的结果。当我对 AJAX 使用相同的请求时,它给了我一个错误的请求。

Ajax.js

案例 1:

$(function() {
$('#message').keyup(function() {
var query = {
"query": {
"match": {
"song": {
"query": $("#message").val(),
"operator": "and"
}
}
}
};

console.log(JSON.stringify(query));

$.ajax({
type: "GET",
url: "http://localhost:9200/firebase/_search",
contentType: 'application/json',
data: query,
success: searchSuccess,
dataType: 'json'
});

});

});

控制台结果:

enter image description here

案例 2:如果我使用 JSON.stringify 转换“数据”,它会给我:enter image description here

案例 3:如果我按如下方式更改查询结构并对“数据”使用 JSON.stringify:

var query = {
query: {
match: {
song: {
query: $("#message").val(),
operator: "and"
}
}
}
};

结果是:

enter image description here

我不确定这里的问题是什么,查询是正确的,因为在 cURL 中使用相同的查询,我在 bash 中得到了正确的结果。问题是如何在这里正确创建 Ajax 请求。不胜感激。

编辑:是的,我在 elasticsearch.yml 中启用了 CORS:

http.cors.enabled : true
http.cors.allow-origin : "*"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type, Content-Length

Edit1:Chrome,下面的网络数据以提供更多信息: enter image description here

Edit2:完整的错误响应如下:

{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"request [/firebase/_search] contains unrecognized parameters: [query[match][song][operator]], [query[match][song][query]]"}],"type":"illegal_argument_exception","reason":"request [/firebase/_search] contains unrecognized parameters: [query[match][song][operator]], [query[match][song][query]]"},"status":400}

最佳答案

根据我的经验,带有主体的 GET 方法的行为有时很难预测。实际上, Elasticsearch 支持带正文的 GET,但根据服务器、代理等的配置,我也得到了一些奇怪的结果……文档甚至突出了 javascript 的问题(search with GET)。

通常,使用 POST 而不是 GET 有助于解决这些问题,或者至少有一个进一步的调试选项。

关于javascript - Elasticsearch:cURL 到 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44612315/

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