我尝试使用带有参数的Elasticsearch 5.1内联脚本,但是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'编译错误')
我通过python elasticsearch客户端执行此查询,客户端版本I使用的是: elasticsearch&GT = 5.0.0,< 6.0.0
我执行查询的方式是:
conn=Elasticsearch(['http://username:password@localhost:9200/'])
conn.search(index='index_name',doc_type='type',body=query)
答案 0 :(得分: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
}
}
}
}
}
格式干净的代码将解决大多数此类错误。
答案 1 :(得分: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
}
}
}
}
}