Как заставить Lucene распознать все слова в запросе?

С помощью Java 8 вы можете использовать ссылку на метод для вашего компаратора:

import static java.util.Comparator.comparing;

Collections.sort(list, comparing(MyObject::getStartDate));
14
задан paul 16 January 2009 в 14:51
поделиться

5 ответов

Это выглядит подобным Поиск Предложения Lucene вопрос. Если Вам интересно, это - то, как я ответил на тот вопрос:

String defaultField = ...;
Analyzer analyzer = ...;
QueryParser queryParser = new QueryParser(defaultField, analyzer);

queryParser.setDefaultOperator(QueryParser.Operator.AND);

Query query = queryParser.parse("Searching is fun");
31
ответ дан 1 December 2019 в 08:20
поделиться

Как сказанный Adam, нет никакой потребности сделать что-либо к строке запроса. QueryParser setDefaultOperator делает точно, что Вы просите.

2
ответ дан 1 December 2019 в 08:20
поделиться

Почему не всего предварительный синтаксический анализ пользователь ищет вход и корректирует его для установки критериям с помощью синтаксис запроса Lucene перед передачей его к Lucene. С другой стороны, Вы могли просто создать некоторую документацию справки относительно того, как использовать стандартный синтаксис, чтобы создать определенный запрос и позволить пользователю решить, как запрос должен быть выполнен.

0
ответ дан 1 December 2019 в 08:20
поделиться

Lucene имеет обширный язык запросов, как описано здесь , который описывает все, что Вы хотите за исключением + быть значением по умолчанию, но это - что-то, что Вы можете простой дескриптор путем замены пробелов +. Таким образом, единственная вещь, которую необходимо сделать, определяют формат, Вы хотите, чтобы люди ввели свои поисковые запросы в (я настоятельно советовал бы для соблюдения синтаксиса Lucene по умолчанию), и затем можно записать преобразования от собственного синтаксиса до синтаксиса Lucene.

0
ответ дан 1 December 2019 в 08:20
поделиться

Поведение трудно кодируется в метод addClause (Список, интервал, интервал, Запрос) класса org.apache.lucene.queryParser. QueryParser, таким образом, единственный способ изменить поведение (кроме обходных решений выше) состоит в том, чтобы изменить тот метод. Конец метода похож на это:

if (required && !prohibited)
  clauses.addElement(new BooleanClause(q, BooleanClause.Occur.MUST));
else if (!required && !prohibited)
  clauses.addElement(new BooleanClause(q, BooleanClause.Occur.SHOULD));
else if (!required && prohibited)
  clauses.addElement(new BooleanClause(q, BooleanClause.Occur.MUST_NOT));
else
  throw new RuntimeException("Clause cannot be both required and prohibited");

Изменение "ДОЛЖНО" к, "ДОЛЖЕН", должен сделать пункты (например, слова) требуемый по умолчанию.

0
ответ дан 1 December 2019 в 08:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: