2010-03-30 4 views
1

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

ex: Приносит в ночное время.

В моем запросе приводятся записи, содержащие из них по крайней мере одно слово.

Потребности: 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 

Гита

+0

мы сможем направить вас к полному решению, как только вы полностью определите термин «соответствие». из того, что вы написали, я могу предположить, что это какая-то функция, которая возвращает сортируемое значение. – Unreason

ответ

1

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

0

Как очень простое решение, вы можете использовать оператор LIKE SQL. Вместо

выберите object_name из table_name где параметр = что-то

Вы бы сделать

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

Это может работать на очень простые сценарии

+0

Я что-то делаю. Но я не получаю надлежащего порядка. – Geeth

+0

Вы можете использовать ORDER BY - http://www.1keydata.com/sql/sqlorderby.html – Ankur

+0

Хорошо, я понимаю, что вы имеете в виду. Ну, это очень простое решение. Если вы хотите иметь их в порядке, то вам нужно определить некоторую меру «соответствия», пусть m - степень соответствия x и y. Это не просто, и я не думаю, что могу дать вам ответ в этом текстовом поле. Если вы действительно хотите, чтобы это сработало, вам следует, вероятно, исследовать Lucene, как рекомендовано Marcelo. – Ankur

0

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

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

0

В Java у вас есть Lucene

Существует также порт для него в PHP (Zend Lucene).

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

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

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