Как реализовать функции поиска на веб-сайте? [закрытый]


Я хочу реализовать функцию поиска для веб-сайта (предположим, что это похоже на SO). Я не хочу использовать поиск Google таких вещей.

мой вопрос:

Как мне это реализовать?

есть два метода, о которых я знаю:

  1. поиск всех баз данных в приложении, когда пользователь дает свой запрос.
  2. индексировать все данные у меня есть и хранить его где-то еще и запрос оттуда (например, что Google делает.)

может кто-нибудь сказать мне, куда идти? Каковы плюсы и минусы?

лучше, есть ли лучшие способы сделать это?

7 57

7 ответов:

используйте lucene,
http://lucene.apache.org/java/docs/

Apache Lucene-это высокопроизводительная полнофункциональная библиотека текстового поиска, полностью написанная на Java. Эта технология подходит практически для любого приложения, которое требует полнотекстового поиска, особенно кросс-платформенного.

Он доступен в java и. net.он также доступен в php в виде модуля Zend framework.

в Lucene делает то, что вы требуется (индексирование искомых элементов), вы должны отслеживать индекс lucene, но это намного лучше, чем делать поиск по базе данных с точки зрения производительности. Кстати, так что поиск питается от lucene. : D

Это зависит от того, как всеобъемлющий веб-сайт и сколько вы хотите сделать самостоятельно.

Если вы используете a a небольшой сайт без дополнительных возможностей для добавления пользовательского поиска, пусть google сделать работу (возможно, добавить Карта сайта) и использовать Google custom search.

Если вы используете среднего сайта С помощью SQL engine используйте функции поиска вашего sql engine.

Если вы выполните некоторые более тяжелый программный стек как J2EE или .Net использовать Lucene, большой, мощный поисковик или его .Net клон lucene.Net

Если вы хотите абстрактный поиск из вашего приложения и иметь возможность запрашивать его нейтральным языком с помощью API XML/HTTP и JSON, посмотрите на solr. Solr запускает lucene в фоновом режиме, но добавляет к нему приятный веб-интерфейс.

возможно, вы захотите взглянуть на xapian и омега переднего плана. Это по сути инструментарий, на котором вы можете построить функциональность поиска.

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

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

недостатком, который вы имеете с подходом индексирования, является время поворота. Есть обходные пути (например, карта от Google вещи), но они также сложны, чтобы получить права.

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

Если вы находитесь на Microsoft plattform, вы можете использовать службу индексирования. Это очень легко интегрируется с веб-сайтов IIS.

Он имеет все основные функции, такие как полнотекстовый поиск, ранжирование, exlcude и включает в себя определенные типы файлов, и вы можете добавить свою собственную метаинформацию, а также с помощью метатегов на html-страницах.

сделайте google, и вы найдете тонны!

Это несколько ортогонально вашему вопросу, но я настоятельно рекомендую идею спокойного поиска. То есть, чтобы выполнить поиск, который никогда не выполнялся, сайт отправляет запрос /поиск/. Чтобы повторно запустить поиск сайт /поиск/{Документы}

есть некоторые хорошие документы, которые можно найти по этому поводу, например здесь.

(тем не менее, мне нравится индексирование, где это возможно, хотя это оптимизация, и поэтому может быть преждевременный.)

Если приложение использует стек Java EE и вы используете Hibernate можно использовать Compass Framework поддерживать поисковый индекс вашей базы данных. Структура компаса использует Lucene под капотом.

единственная загвоздка в том, что вы не можете реплицировать свой индекс поиска. Поэтому вам нужно использовать кластеризованную базу данных для хранения таблиц индексов или использовать новые механизмы хранения индексов на основе сетки, которые были добавлены в Compass Основы 2.x.