ElasticSearch version is 2.3.4
Как запросить сопоставление geo_distance_query и script_query?Запрос на выполнение запроса на эластичный поиск и запрос геоданных
У меня есть индекс, в котором много информации о магазине, есть поля местоположения и расстояния. Учитывая географическую точку, индекс, основанный на вершине запроса на основе geo_distance_query, указывает на то, что все сохраняют расстояние, и рассчитанное расстояние должно быть меньше текущего хранилища в значении поля расстояния.
Я думаю, что сочетание script_query и geo_distance_query, не знаю, как достичь.
Попробуйте следующий код:
query: {
bool: {
must: [
{
script: {
script: {
inline: "doc['location'].arcDistance(" + _.lat + "," + _.lon + ") < doc['distance'].value"
, lang: "painless"
}
}
}
]
}
}
Результаты Elasticsearch ошибка:
[illegal_argument_exception] script_lang not supported [painless]
кто-то сталкивался ли и решить эту проблему, используя какой метод для реализации запроса?
Код изменения:
{
bool: {
must: [
{
script: {
script: {
inline: "doc['location'].arcDistance(" + _.lat + "," + _.lon + ") < doc['distance'].value"
, lang: "groovy"
}
}
}
]
}
}
также ошибка:
message: '[script_exception] failed to run inline script [doc[\'location\'].arcDistance(31.89484,120.287825) < doc[\'distance\'].value] using lang [groovy]',
детали изображения:
{
"error": {
"root_cause": [{
"type": "script_exception",
"reason": "failed to run inline script [doc[\'location\'].arcDistance(31.89484,120.287825) < 3000] using lang [groovy]"
}],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query_fetch",
"grouped": true,
"failed_shards": [{
"shard": 0,
"index": "business_stores_v1",
"node": "Z_65eOYXT6u8aDf7mp2ZRg",
"reason": {
"type": "script_exception",
"reason": "failed to run inline script [doc[\'location\'].arcDistance(31.89484,120.287825) < 3000] using lang [groovy]",
"caused_by": {"type": "null_pointer_exception", "reason": null}
}
}]
}, "status": 500
}
В 'painless' сценариев язык введен в ES 5. Эта ошибка означает, что вы используете ES 2.x, и вы читаете документ для ES 5. Если вы используете ES 2.x, тогда используйте 'groovy' вместо' безболезненный' – Val
@Val уже обновление. тоже ошибка. Я не думаю, что он поддерживает способ сравнения этого запроса с динамическим сопоставлением. – sky91
Какая ошибка у вас есть? Конечно, другой. Откуда берутся '_.lat' и' _.lon'? – Val