2016-05-03 23 views
2

は、私は距離のためgeo_pointを使用しようとしていますが、それは常に私がgeo_pointにマッピングする場所を設定する方法をgeo_pointないダブル場所の種類を示しています。弾性検索地理・ポイント・クエリフィルタ

実際に私がソートされた5キロ内のすべてのレコードを見つける必要があります。

"pin" : { 
      "properties" : { 
      "location" : { 
      "properties" : { 
      "lat" : { 
      "type" : "double" 
      }, 
       "lon" : { 
       "type" : "double" 
       } 
       } 
       }, 
        "type" : { 
        "type" : "string" 
        } 
       } 
       }, 

と、私はこのクエリで検索をしようとしていたときに、以下のデリー緯度長いの5キロ以内に結果を見つけるために:それは私にエラーquery_parsing_exceptionと[ピン]に登録されませんクエリを示し

{ 
      "query": { 
      "filtered": { 
       "query": { 
       "match_all": {} 
       }, 
       "filter": { 
       "pin": { 
        "distance": "5", 
        "distance_unit": "km", 
        "coordinate": { 
        "lat": 28.5402707, 
        "lon": 77.2289643 
        } 
       } 
       } 
      } 
      } 
     } 

。私は問題を理解することはできません。常にこの例外がスローされます

{ 

      "error": { 
       "root_cause": [ 
        { 
         "type": "query_parsing_exception", 
         "reason": "No query registered for [pin]", 
         "index": "find_index", 
         "line": 1, 
         "col": 58 
        } 
       ], 
       "type": "search_phase_execution_exception", 
       "reason": "all shards failed", 
       "phase": "query", 
       "grouped": true, 
       "failed_shards": [ 
        { 
         "shard": 0, 
         "index": "find_index", 
         "node": "DtpkEdLCSZCr8r2bTd8p5w", 
         "reason": { 
          "type": "query_parsing_exception", 
          "reason": "No query registered for [pin]", 
          "index": "find_index", 
          "line": 1, 
          "col": 58 
         } 
        } 
       ] 
      }, 
      "status": 400 

     } 

この問題を解明するのを手伝ってください。どのように私はgeo_pointを設定し、

答えて

2

あなたは単にすなわちgeo_point data type使用して、このようなあなたのpinタイプをマッピングする必要があり、この例外エラーとステータス400とall_shards_failedエラー解決することができます:あなたがインデックス文書などをすることができます次に

# 1. first delete your index 
DELETE shouut_find_index 

# 2. create a new one with the proper mapping 
PUT shouut_find_index 
{ 
    "mappings": { 
    "search_shouut": { 
     "properties": { 
     "location": { 
      "type": "geo_point" 
     }, 
     "type": { 
      "type": "string" 
     } 
     } 
    } 
    } 
} 

をこの

PUT shouut_find_index/search_shouut/1 
{ 
    "location": { 
     "lat": 28.5402707, 
     "lon": 77.2289643 
    }, 
    "type": "dummy" 
} 

そして最後に、あなたのクエリは、この

POST shouut_find_index/search_shouut/_search 
{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "geo_distance": { 
      "distance": "5km", 
      "location": { 
      "lat": 28.5402707, 
      "lon": 77.2289643 
      } 
     } 
     } 
    } 
    } 
} 
のように見えることができます210
+0

こんにちはヴァルは....あなたはそれがalwayzダブルあなたがそれを最初にインデックスを削除して再作成する必要は –

+0

geo_pointない私はタイプを示すとして私がタイプgeo_pointを設定するために助けてくださいすることができます。私の更新された答えを参照してください – Val

+0

私はインデックスを作成する前に、または関連するデータベースのデータを挿入する必要がありますか? –