2017-02-14 57 views
0

我試圖使用帶有參數Elasticsearch 5.1嵌入式腳本,但是PARAMS標籤似乎並不工作:使用內嵌腳本參數Elasticsearch

下面的查詢工作不PARAMS:

{ 
    "query": { 
    "match_all":{} 
    }, 
    "script_fields": { 
    "distance": { 
    "script":{ 
    "lang":"painless", 
    "inline":"doc['address_details.location.point'].arcDistance(-38.376465,144.829099)" 
     } 
    } 
    } 
} 

下面的查詢不會工作,因爲我使用PARAMS:

{ 
     "query":{ 
      "match_all":{ 

      } 
     }, 
     "script_fields":{ 
      "distance":{ 
      "script":{ 
       "lang":"painless", 
       "inline":"doc['address_details.location.point'].arcDistance(latitude,longitude)", 
       "params":{ 
        "latitude":-38.376465, 
        "longitude":144.829099 
       } 
      } 
      } 
     } 
    } 

錯誤味精:TransportError(500,u'search_phase_execution_exception 'u'compile錯誤')

我執行經由蟒elasticsearch客戶這個查詢,我使用的客戶機的版本是: elasticsearch> = 5.0.0,6.0.0 <

我執行查詢的方式是:

conn=Elasticsearch(['http://username:[email protected]:9200/']) 
conn.search(index='index_name',doc_type='type',body=query) 

回答

0

原來Elasticsearch文檔是錯誤的,你應該添加「params」。在變量前面以訪問它的值。

這裏是正確的查詢:

{ 
    "query":{ 
     "match_all":{ 

     } 
    }, 
    "script_fields":{ 
     "distance":{ 
     "script":{ 
      "lang":"painless", 
      "inline":"doc['address_details.location.point'].arcDistance(params.latitude,params.longitude)", 
      "params":{ 
       "latitude":-38.376465, 
       "longitude":144.829099 
      } 
     } 
     } 
    } 
} 
0

當我看到你的第二個查詢是無效的,你有錯身邊params,你必須.arcDistance(latitude,longitude),"params"修復它只是添加"逗號前,所以.arcDistance(latitude,longitude)","params"

它應該是如:

{ 
    "query":{ 
     "match_all":{ 

     } 
    }, 
    "script_fields":{ 
     "distance":{ 
     "script":{ 
      "lang":"painless", 
      "inline":"doc['address_details.location.point'].arcDistance(latitude,longitude)", 
      "params":{ 
       "latitude":-38.376465, 
       "longitude":144.829099 
      } 
     } 
     } 
    } 
} 

乾淨的格式化的代碼將解決大多數這些類型的錯誤。

+0

喜AI-Mothafar,對不起,是我不好,我錯過了報價張貼到論壇時,我原來的查詢居然有報價。我更詳細地修改了我的問題。 –