Сложный поисковый запрос в lucene (запрос полей, которые индексируются как числовые, анализируются или не анализируются с использованием простого анализатора) - PullRequest
1 голос
/ 31 августа 2010

Привет. Я создаю поисковое приложение, используя lucene. Некоторые из моих запросов сложны. Например, Мои документы содержат поля местоположение и население, где местоположение - это не проанализированное поле, а население - числовое поле. Теперь мне нужно вернуть все документы, которые имеют местоположение как "Сан-Франциско" и население между 10000 и 20000. Если я объединю эти два поля и создам запрос, подобный этому:

местоположение: Сан-Франциско И население: [10000 - 20000], я не получаю правильный результат. Любые предложения о том, почему это может происходить и что я могу сделать.

Кроме того, при построении сложных запросов некоторые поля, которые я включаю, анализируются, а другие не анализируются. Например, поле местоположения не анализируется и содержит такие термины, как Чикаго, Сан-Франциско и так далее. При этом поле сводки анализируется и, как правило, содержит описательный абзац.

Рассмотрим этот запрос:

расположение: Сан-Франциско И резюме: "отличные рестораны"

Теперь, если я использую StandardAnalyzer во время поиска, я не получу правильные результаты, когда поле местоположения содержит термин, такой как san-francisco или los-angeles (т.е. он не может обрабатывать дефис между ними), но если я использую анализатор ключевых слов для запроса я также не получаю правильных результатов, потому что он не может найти фразу "отличные рестораны" в поле сводки.

Ответы [ 2 ]

1 голос
/ 01 сентября 2010

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

  1. Вы не уверены, почему определенный запрос не возвращает никаких результатов.

  2. Вы не уверены, почему некоторые поля не анализируются.

  3. У вас проблемы со встроенными анализаторами, работающими с дефисами.

Вот как читается ваш пост.Если это правильно, я бы посоветовал вам опубликовать каждый вопрос отдельно.Вы получите лучшие ответы, если вопрос точный.Потрясающе пытаться ответить на ваш вопрос в текущем формате.

А теперь позвольте мне сделать удар в темноте по некоторым из ваших проблем:

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

Для второй проблемы проверьте документ, который вы добавляете в Lucene.Lucene предоставляет возможность хранить данные, но не индексировать их.Убедитесь, что вы указали правильную опцию при добавлении полей в документ.

Для третьей проблемы, если встроенные анализаторы не работают для вас, ломая дефисы, просто создайте свой собственный анализатор.Я столкнулся с похожей проблемой с символом '@', и для ее решения я написал специальный анализатор , который правильно с ним справился.Вы можете сделать то же самое для дефисов.

0 голосов
/ 01 сентября 2010

Вы должны использовать PerFieldAnalyzerWrapper . Как следует из названия, вы можете использовать разные анализаторы для разных областей. В этом случае вы можете использовать KeywordAnalyzer для названия города и StandardAnalyzer для текста.

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