Как получить правильную строку запроса из lucene QueryNode? - PullRequest
0 голосов
/ 20 марта 2020

Я должен что-то упустить, потому что это похоже на очевидный контрольный пример ...

В моем случае я делаю что-то вроде следующего:

import org.apache.lucene.queryparser.flexible.core.nodes.QueryNode;
import org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser;
import org.apache.lucene.queryparser.flexible.standard.parser.EscapeQuerySyntaxImpl;

String query = "numericField:[1 TO 2]"

StandardSyntaxParser syntaxParser = new StandardSyntaxParser();
QueryNode parentNode = syntaxParser.parse(queryString, "");

//some transformations, not relevant to the problem

String transformedQueryString = String.valueOf(parentNode.toQueryString(new EscapeQuerySyntaxImpl()));

Эта простая операция - анализировать простой запрос диапазона и возвращать его как строку запроса - однако приводит к следующему запросу:

"[numericField:1 numericField:2]"

Что, как вы заметите, не является допустимым запросом диапазона (и может вызвать QueryNodeParseException, если я попытаюсь разобрать это в коде выше). Кажется, это напрямую связано с реализацией toQueryString в AbstractRangeQueryNode.class.

Я пробовал это как с lucene-queryparser 8.0.0, так и с 8.3.0 с одинаковым результатом.

Что правильный способ снова получить queryString из QueryNode?

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