2017-02-14 3 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, жаль, что это моя плохо, что я пропустил цитату, отправляя на форум, мой первоначальный запрос на самом деле есть цитата. Я уточнил свой вопрос с более подробной информацией. –

Смежные вопросы