APO C Формат запроса Elasticsearch - PullRequest
0 голосов
/ 29 апреля 2020

Я использую Neo4j 4.0.3, Elasticsearch 6.8.3 и APO C.

Я хочу выполнить запрос агрегации Elasticsearch через Neo4J с использованием процедуры APO C Elasticsearch.

Запрос определен в теле запроса и работает на Elasticsearch, но я не уверен, как создать параметр запроса с помощью процедуры. В Elasticsearch я могу передать тело запроса в качестве параметра источника (с типом содержимого источника JSON).

Чтобы продемонстрировать, я пытался заставить работать простой запрос.

Это работает в Elasticsearch:

GET http://localhost:9200/trends/trend/_search?source={"query": {"match" : {"type" : "ENTITY"}}}&source_content_type=application/json

, но когда я пробую это через процедуру ES:

CALL apoc.es.query('elasticsearch:9200', 'trends', 'trend', 'source={"query":{"match":{"type":"ENTITY"}}}&source_content_type=application/json', null)

Neo4J выдает следующую ошибку :

Failed to invoke procedure `apoc.es.query`: Caused by: java.net.URISyntaxException: Illegal character in query at index 54: http://elasticsearch:9200/trends/trend/_search?source={"query":{"match":{"type":%22ENTITY%22%7D%7D%7D````

Что мне нужно сделать, чтобы правильно передать запрос?

1 Ответ

0 голосов
/ 29 апреля 2020

Получилось, я пропустил параметр payload. Таким образом, вызов APO C был таким:

CALL apoc.es.query('elasticsearch:9200', 'trends', 'trend', null, '{"query":{"match":{"type":"ENTITY"}}}')

В качестве альтернативы я мог бы передать запрос как Map

CALL apoc.es.query('elasticsearch:9200', 'trends', 'trend', apoc.map.fromPairs([
    ["source_content_type", "application/json"],
    ["source", '{"query":{"match":{"type":"ENTITY"}}}']
]), null)
...