今日私はElasticSearchとjQueryに問題があります。私は解決策を探しましたが、解決策は見つかりませんでした。jQuery/Ajaxを使用した弾性検索クエリ
jQueryを使用してElasticSearchからデータを取得したいとします。それは、代わりにカールを使用すると動作します。
curl -XGET "http://localhost:9200/locations/_search?pretty=true" -d '
{
"sort": [
"_score",
{
"_geo_distance": {
"location": {
"lat" : 40.715,
"lon": -73.998
},
"order": "asc",
"unit": "km",
"distance_type": "plane"
}
}
]
}'
ただし、jQueryを使用すると機能しません。私は試しました:
var data = {
"query": {
"filtered": {
"filter": {
"geo_distance": {
"distance": "1km",
"location": {
"lat" : 40.715,
"lon": -73.998
}
}
}
}
}
}
$.ajax({
method: "GET",
url: "http://localhost:9200/locations/_search?pretty=true",
crossDomain: true,
async: false,
data: data,
dataType : 'json',
contentType: 'application/json',
})
.done(function(data) {
console.log(data);
})
.fail(function(data) {
console.log(data);
});
私はJSON.stringify(データ)でデータを渡そうとしましたが、動作しません。私は "GET"から "POST"にメソッドを変更しようとしましたが、結果はありませんでした。さて、それは働いています。 ElasticSearchはいくつかの場所で応答を返しますが、私の場所は私が要求した場所から遠く離れています。 40.715、-73.998の場所はニューヨークで、カールを使用するとニューヨークの場所が返されますが、jQueryを使用するとメキシコで場所を取得するので、「データ」変数は無視されます。私はjson.Stringifyを使用しようとしました。はい、それはエラーを返します:
Object { readyState: 0, getResponseHeader: .ajax/y.getResponseHeader(), getAllResponseHeaders: .ajax/y.getAllResponseHeaders(), setRequestHeader: .ajax/y.setRequestHeader(), overrideMimeType: .ajax/y.overrideMimeType(), statusCode: .ajax/y.statusCode(), abort: .ajax/y.abort(), state: .Deferred/e.state(), always: .Deferred/e.always(), catch: .Deferred/e.catch(),… }
それで、それを動作させるには?