2016-07-12 10 views
0

今日私は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(),… } 

それで、それを動作させるには?

答えて

0

問題は解決しました。私のコードは大丈夫です。メソッドを "POST"に変更しました。 Google Chromeデベロッパーツールを使用すると、コードの他の部分がうまくいかないことに気付きました。私のコードでは

"location": { 
    "lat" : 40.715, 
    "lon": -73.998 
} 

緯度と経度は、私のコードの他の部分は、getCurrentPosition(から新しい値を割り当てることができなかったため、空だったwchich変数(私はStackOverflowの質問のためのCOORDSにそれらを変更))(デフォルトました値が0だったので、私のコードはうまくいきませんでした)。だから、コードの正しいバージョンは次のとおりです。緯度と経度がgeopoint

するパラメータを必要とする変数であることを

var data = { 
    "query": { 
    "filtered": { 
     "filter": { 
     "geo_distance": { 
      "distance": "1km", 
      "location": { 
      "lat" : lat, 
      "lon": lon 
      } 
     } 
     } 
    } 
    } 
} 

$.ajax({ 
    method: "GET", 
    url: "http://localhost:9200/locations/_search?pretty=true", 
    crossDomain: true, 
    async: false, 
    data: JSON.stringify(data), 
    dataType : 'json', 
    contentType: 'application/json', 
}) 
.done(function(data) { 
    console.log(data); 
}) 
.fail(function(data) { 
    console.log(data); 
}); 

お知らせ