Вопрос

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

бывший:Приносит ночь.

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

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

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

Редактировать:

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

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

Гита

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

Решение

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

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

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

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

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

ты бы сделал

выберите имя_объекта из имени_таблицы, где параметр НРАВИТСЯ что-то

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

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

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

В Java у вас есть Лусене

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

У вас также есть порт на C#. Люсен .NET

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

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

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