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

StackOverflow https://stackoverflow.com/questions/34314

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Мой вопрос:

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

Есть два метода, которые мне известны:

<Ол>
  • Поиск всех баз данных в приложении, когда пользователь дает свой запрос.
  • Индексируйте все данные, которые у меня есть, сохраняйте их где-то еще и запрашивайте оттуда (например, что делает Google).
  • Кто-нибудь может сказать мне, куда идти? Какие плюсы и минусы?

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

    Это было полезно?

    Решение

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

      

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

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

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

    Другие советы

    Это зависит от того, насколько сложен ваш веб-сайт и сколько вы хотите сделать сами.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top