2008-08-29 3 views
54

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

Мой вопрос:

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

Есть два метода, которые я отдаю себе отчет:

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

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

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

ответ

33

Использование Lucene,
http://lucene.apache.org/java/docs/

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

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

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

+0

Если вы рассматриваете Lucene, вы должны ДЕЙСТВИТЕЛЬНО рассмотреть проект Solr. Подумайте об этом как Lucene как услуге – sclarson 2013-03-06 03:24:38

4

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

1

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

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

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

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

0

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

Есть несколько хороших документов по этому вопросу, например here.

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

-1

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

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

1

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

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

Сделайте Google, и вы найдете тонны!

30

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

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

Если вы запустили средний сайт с движком sql, используйте функции поиска вашего SQL-движка.

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

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

+3

У меня есть вопрос об этом. Могу ли я реализовать пользовательский поиск Google для сайта интрасети? Если я это сделаю, я подвергу свою компанию риску? Я бы предпочел не писать свою собственную логику. – Richie 2014-03-04 01:38:48

Смежные вопросы