Как создать более сложные строки запросов Lucene? - PullRequest
5 голосов
/ 10 февраля 2009

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

  • Как программно создавать запросы. Я знаю, что могу начать создавать строки и анализировать их с помощью анализатора запросов. Но так как я собираю кусочки информации из других ресурсов, есть программный способ сделать это.
  • Каковы правила синтаксиса для запросов Lucene?

- РЕДАКТИРОВАТЬ--

Я приведу пример требования для запроса, который я хотел бы сделать:
Скажем, у меня есть 5 полей:

  1. Имя
  2. Фамилия
  3. Возраст
  4. Адрес
  5. Все

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

Как мне поступить об этом?

1 Ответ

6 голосов
/ 22 апреля 2010

Используйте класс BooleanQuery для создания объектов запроса. Создайте один из них и добавьте () другие объекты Query для создания большего дизъюнктивного запроса:

  • BooleanQuery q = new BooleanQuery ();
  • q.add (qFirstName, Occur.SHOULD);
  • q.add (qLastName, Occur.SHOULD);
  • ...

Атомарные запросы можно создавать с помощью классов Term и TermQuery.

(Ссылки и примеры для Lucene Java, но .NET должны быть похожими.)

...