Алгоритм поиска - PullRequest
       28

Алгоритм поиска

1 голос
/ 30 марта 2010

Я создаю страницу поиска, где мы можем найти товар, введя текст.

напр .: Приносит на ночь.

Мой запрос приносит записи, которые содержат хотя бы слово из этого.

Потребность: 1. Первая строка должна содержать запись с данным предложением. 2. второй ряд следующий наиболее подходящий. 3. Третий ряд следующего соответствия ... и т. Д.

Как этого добиться. Есть ли алгоритм для этого. Будет более полезно, если кто-нибудь поделится вашей идеей.

Edit:

Пример поиска заказа:

1. Brings on the night
2. Whoever Brings the Night
3. Night Baseball Brings
4. Night ride
5. Night Round
6. Brings flower

Гит

Ответы [ 5 ]

1 голос
/ 30 марта 2010

Создание поисковой системы - очень сложное мероприятие, связанное с неопределенностью, человеческим языком, опечатками и многим другим. Вы должны попытаться использовать все, что поставляется с вашим ядром базы данных. SQL Server и SQLite имеют их из коробки, и большинство других баз данных, вероятно, имеют аналогичные возможности. Эти движки не особенно хороши, но их должно хватить для простых сценариев. Для более серьезной работы попробуйте Lucene, который поставляется в различных вариантах для разных языков программирования.

0 голосов
/ 30 марта 2010

В Java у вас есть Lucene

В php (Zend Lucene) также есть порт для него.

У вас также есть порт для C # Lucene .NET

Просто изменив свои модели БД, вы можете интегрировать его в поисковую систему.

Посмотрите. Я использовал Lucene в прошлом, и он всегда был очень эффективным и действенным.

0 голосов
/ 30 марта 2010

Некоторые указатели
- попробуйте полнотекстовый поиск в вашей СУБД или исследуйте такие решения, как Lucene / Solr
- есть реализации distance (Левенштейн) в SQL , для не столь тривиального ранжирования, сделанного вручную
- n-грамм (биграммы, триграммы) может многое сделать, см., Например, все параметры внутреннего поиска postgres по сравнению с mysql или MSSQL

Внутренние поиски СУБД (postgres может быть исключением) обычно имеют слишком мало опций, реализация собственных слишком сложна, иначе СУРБД не позволит вам сделать это (эффективно).

0 голосов
/ 30 марта 2010

Вы пробовали полнотекстовый поиск? http://msdn.microsoft.com/en-us/library/ms142583.aspx

0 голосов
/ 30 марта 2010

В качестве действительно простого решения вы можете использовать оператор LIKE sql. Вместо

выберите имя_объекта из имени_таблицы, где параметр = что-то

Вы бы сделали

выберите имя_объекта из table_name, где параметр LIKE что-то

Это может работать для очень простых сценариев

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