Алгоритм страницы поиска
-
23-09-2019 - |
Вопрос
Я создаю страницу поиска, на которой мы можем найти продукт, введя текст.
бывший:Приносит ночь.
Мой запрос приносит записи, содержащие хотя бы слово из этого.
Потребности: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, и он всегда был очень эффективным и действенным.