Существуют ли технологии, которые помогают развивать поиск по сайту? - PullRequest
1 голос
/ 21 июля 2009

ПРОБЛЕМА: Мне нужно написать расширенный поиск для веб-сайта. Все данные хранятся в MySQL, и я использую Zend Framework сверху. Я знаю, что могу написать скрипт, который берет страницу поиска и строит из нее запрос SQL, но это становится чрезвычайно медленным, если есть много обращений. Тогда я должен был бы перейти к мельчайшим деталям оптимизации таблиц базы данных / полей / и т.д. которого я стараюсь избегать, если возможно.

Lucene: Я попробовал Lucene, но, поскольку это полнотекстовый поисковый движок, он не допускает никаких математических операторов !! Поэтому, если бы я хотел получить все записи, где field_x> 5, я бы не смог это сделать (правильно?)

Общая практика? Я хотел бы знать, как крупные сайты справляются с этой дилеммой. Есть ли стандартный способ сделать это, о котором я не знаю, или каждый должен иметь дело с неприятными деталями оптимизации базы данных в какой-то момент? Я надеялся, что существует какая-то быстрая технология индексации / поиска (например, Lucene), которая поможет решить эту проблему.

ЛЮБЫЕ ДРУГИЕ КОММЕНТАРИИ ИЛИ ПРЕДЛОЖЕНИЯ ДОБРО ПОЖАЛОВАТЬ !!

Большое спасибо, ребята! Али

Ответы [ 3 ]

1 голос
/ 21 июля 2009

Вы можете использовать фильтры в Lucene для выполнения текстового поиска по сокращенному набору записей. Поэтому, если вы сначала запросите базу данных, чтобы получить все записи, где field_x> 5, создайте фильтр (список идентификаторов документов lucene) и передайте его в метод поиска lucene вместе с текстовым запросом. Я только что узнал об этом, вот ссылка на вопрос, который я задал (он использует Lucene.Net и C #, но это может помочь) - проигнорируйте мой вопрос, просто проверьте принятый ответ:

Как реализовать пользовательский фильтр с Lucene.net?

1 голос
/ 21 июля 2009

Вы можете использовать Zend Lucene для текстового поиска и комбинировать его с MySQL для объединений.Пожалуйста, ознакомьтесь с документом Марка Крелленштейна против СУБД о выборе;По сути, поисковые системы лучше подходят для ранжированного текстового поиска;Базы данных лучше подходят для более сложных манипуляций с данными, таких как объединения, с использованием различных структур записей.

Для простого запроса типа x> 5 вы можете использовать запрос диапазона внутри Lucene.

1 голос
/ 21 июля 2009

Используйте Lucene для текстового поиска и используйте SQL для field_x > 5 поиска. Я говорю это потому, что поиск по тексту трудно сделать правильным, и вам, вероятно, лучше оставить это эксперту.

Если вам нужно, чтобы у ваших пользователей была возможность строить математические поиски по выражениям, рассмотрите возможность создания диалогового окна для построения выражений, как в этом примере , чтобы собрать поисковую фразу. Затем используйте параметризованный SQL-запрос для выполнения поиска.

Управление сервером ASP.NET SqlWhereBuilder
http://www.codeproject.com/KB/custom-controls/SqlWhereBuilder.aspx

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