Сложные запросы Lucene в ElasticSearch - PullRequest
0 голосов
/ 03 июля 2018

Мы использовали Lucene в течение последних лет, и мы собираемся перейти на ElasticSearch. У нас есть много запросов Lucene (сложных), которые мы хотим использовать повторно. Я видел в ElasticSearch API "query_string" (https://www.elastic.co/guide/en/elasticsearch/reference/6.3/query-dsl-query-string-query.html#query-string-syntax).. Он работает довольно хорошо для простых запросов, но не работает при использовании таких функций, как spanNear или spanOr См. Ниже часть запроса:

spanNear([spanOr([ADDRESS:13, ADDRESS:13a, ADDRESS:13b, ADDRESS:13c, ADDRESS:13d, ADDRESS:13e, ADDRESS:13f, ADDRESS:13g, ADDRESS:13h, ADDRESS:13i, ADDRESS:13j, ADDRESS:13k, ADDRESS:13l, ADDRESS:13m, ADDRESS:13n, ADDRESS:13r, ADDRESS:13s, ADDRESS:13u, ADDRESS:13v, ADDRESS:13w, ADDRESS:13x, ADDRESS:13y, ADDRESS:13z]), [ADDRESS:carlton, ADDRESS:chalton, ADDRESS:charaton, ADDRESS:charleton, ADDRESS:charlon, ADDRESS:charlson, ADDRESS:charlston, ADDRESS:charlton, ADDRESS:charltons, ADDRESS:charlvon, ADDRESS:charston, ADDRESS:charton, ADDRESS:chorlton, ADDRESS:harlton, ADDRESS:sharlton]))

Знаете ли вы, как лучше всего использовать запросы такого рода, не переписывая их в формат ES? Мы используем библиотеки Java Lucene для генерации запросов на случай, если это поможет. Заранее спасибо.

1 Ответ

0 голосов
/ 05 июля 2018

Звучит так, будто вы получаете toString из вашего запроса и надеетесь, что ElasticSearch его проанализирует. Плохая новость, в Elasticsearch нет ничего, что могло бы проанализировать вывод Query.toString. В Lucene также нет ничего, что могло бы его проанализировать. Для простых запросов может выплевывать разбираемую строку запроса, но это никогда не гарантируется. Query.toString() для отладки, а не для сериализации.

Для выполнения этих запросов вasticsearch API поддерживает полный набор запросов span , включая span_near и span_or

Существуют также синтаксические анализаторы запросов, поддерживающие синтаксические запросы, такие как Surround и Complex Phrase . ElasticSearch, однако, не имеет их из коробки, но может быть хорошим вариантом, если вы хотите выполнить работу по созданию подключаемого модуля для использования их в ElasticSearch (процесс, на который я видел ссылки, и он выглядит вполне управляемый, но с которым я не очень знаком).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...