Я должен что-то упустить, потому что это похоже на очевидный контрольный пример ...
В моем случае я делаю что-то вроде следующего:
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?