私はelasticsearchにAjaxリクエストを使用して検索結果を取得しています。 最後に、私は行く必要のあるクエリを見つけました。弾性検索:cURLからAjaxへのリクエスト
[~]$ curl -XGET 'localhost:9200/firebase/_search?pretty' -H 'Content-Type: application/json' -d'
> {"query": {"match": {"song": {"query": "i am in", "operator": "and"}}}}'
結果:
{
"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/..."
}
}
]
}
}
このクエリは、私が必要とするまさにその結果与えます。ここ
はcURLの中のクエリである(これはlinkへのフォローアップの質問です) 。 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'
});
});
});
結果:
ケース2:私はJSON.stringifyを使って「データ」を変換する場合、それは私を与える:
ケース3:私は次のようにクエリ構造を変更し、データ」にJSON.stringifyを使用している場合「:
var query = {
query: {
match: {
song: {
query: $("#message").val(),
operator: "and"
}
}
}
};
結果は次のとおりです。
私はsのではありませんよ確かに何が問題なのでしょうか?クエリは正しいのですが、これは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:クローム、より多くの情報を提供するために、下にあるように、ネットワーク・データ:
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}
elastichostがインストールされているサーバのIPアドレスを使用する必要があります –
私のクエリ構造が単純に - data:{'q':$( '#message')。val()、} 。 localhostに問題はありませんでした。しかし、通常のクエリは私の問題を解決していないので、私は一致を使用したかったので、変更を使用したかったのです。したがって、私はチェックして戻ってきますが、localhostが問題であるかどうかはわかりません。 – Manganese
動作しません。 9200に127.0.0.1(ループバック)と192.168.0.1(サイトローカル)の両方を使用して試しました。さらに、私のelasticsearchは今のところローカルに実行されています。 – Manganese