Использование Lucene MultiFieldQueryParser для нескольких обязательных полей - PullRequest
0 голосов
/ 18 февраля 2011

Я пытаюсь использовать MultiFieldQueryParser для выполнения следующего поиска:

содержимое: hello world priority: high

т.е. я только хочу просмотреть возвращенные документыкоторые содержат слова «привет» и «мир» и которые имеют приоритет «высокий».Поведение по умолчанию для MultiFieldQueryParser, по-видимому, возвращает все, что либо содержит содержимое: hello world ИЛИ priority: high - я не могу понять, как это изменить.

Любой совет?

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

MultiFieldQuery используется, когда вы хотите найти термин в нескольких полях.То, что вы ищете, это простой логический запрос с двумя предложениями.Должен работать следующий запрос.

+(+contents:hello +contents:world) +priority:high

Здесь у вас есть один логический запрос с предложениями Occur.MUST, один из которых, в свою очередь, является логическим запросом двух предложений, а другой - запросом термина.

0 голосов
/ 12 февраля 2012

Вы можете установить оператор по умолчанию для анализатора с помощью метода setDefaultOperator.

Пример:

...
Analyzer userTermsAnalyzer = searchFactory.getAnalyzer(MyEntity.class);
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_CURRENT, new String[]{"text"}, userTermsAnalyzer);
queryParser.setDefaultOperator(QueryParser.Operator.AND);
Query taskQuery = queryParser.parse("contents:hello world priority:high");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...