Как объединить PhraseQuery с RangeQuery в Apache Lucene? - PullRequest
0 голосов
/ 19 октября 2018

По сути, я хочу иметь возможность запросить индекс с помощью следующего запроса "phrase query" AND date:[20180101 TO 20181231].Я попытался использовать MultiFieldQueryParser, но получил следующую ошибку:

Exception in thread "main" java.lang.IllegalStateException: field "date" was indexed without position data; cannot run PhraseQuery

Итак, я построил запрос, используя следующий код:

final Query phraseQ = new QueryParser("text", Analyzer.CUSTOM)
        .parse(query);
final Query rangeQ = new QueryParser("date", Analyzer.CUSTOM)
        .parse(dateRange);

final Query q = new BooleanQuery.Builder()
        .add(phraseQ, BooleanClause.Occur.MUST)
        .add(rangeQ, BooleanClause.Occur.MUST)
        .build();

где запрос "phrase query"~1 и dateRange date:[20180101 TO 20181231].Я все еще получаю следующее исключение

Exception in thread "main" java.lang.IllegalStateException: field "date" was indexed without position data; cannot run PhraseQuery (phrase=date:"phrase query"~1)

, хотя я не запрашиваю поле даты с помощью фразы.

Объединяются ли запросы с фразами с запросами диапазона вообще

1 Ответ

0 голосов
/ 20 октября 2018

MultiFieldQueryParser предназначен для поиска во всех списках полей, заданных, когда поле не указано в запросе.Итак, это:

MultiFieldQueryParser parser = new MultiFieldQueryParser(new String[] {"text","date"}, new StandardAnalyzer());
Query query = parser.parse("\"phrase query\" AND date:[20180101 TO 20181231]");

Создает запрос, который выглядит следующим образом:

+(text:"phrase query" date:"phrase query") +date:[20180101 TO 20181231]

Таким образом, проблема.Если вы замените его просто стандартным QueryParser, с полем по умолчанию «текст», оно должно выдать то, что вы хотите.


Однако, насколько вы предоставили код,выглядит хорошо.Попробуйте распечатать содержимое dateRange непосредственно перед его разбором, убедитесь, что это то, что вы думаете.

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