2017-02-10 3 views
0
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]', 

детали изображения:

code result

{ 
"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 

}

+0

В 'painless' сценариев язык введен в ES 5. Эта ошибка означает, что вы используете ES 2.x, и вы читаете документ для ES 5. Если вы используете ES 2.x, тогда используйте 'groovy' вместо' безболезненный' – Val

+0

@Val уже обновление. тоже ошибка. Я не думаю, что он поддерживает способ сравнения этого запроса с динамическим сопоставлением. – sky91

+0

Какая ошибка у вас есть? Конечно, другой. Откуда берутся '_.lat' и' _.lon'? – Val

ответ

0

ошибка, вы получаете, то есть null_pointer_exception потому, что один из документов в вашем business_stores_v1 индекс имеет поле нулевой location и, таким образом, формула не может

doc['location'].arcDistance(...) 
      ^
       | 
    null_pointer_exception here 
+0

Извините, надолго не писал java, имеет нет интуитивно известно об этой ошибке null_pointer_exception ... еще раз спасибо – sky91

+0

Использовал doc ['location']. empty для проверки значения поля ... – sky91

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