|
|
|
Полнотекстовый поиск с учетом ошибок
|
|||
|---|---|---|---|
|
#18+
есть таблица с movies с полями: id [INT] name [STRING] rating [FLOAT] Будет производиться полнотекстовый поиск по полю name и сортироваться по полю rating . Все это достаточно легко реализовать, но проблема в другом: пользователи часто неверно вводят названия фильмов (да и вообще всего). Вопрос: как можно реализовать поиск по синонимам? То есть сам пользователь ничего не подозревает, перед ним есть всего одно поле, в которое он вводит запрос, скажем "хобит", но в выпадающем окошке с подсказками должен появиться "хоббит" (если таковой имеется в таблице). Может в таблицу movies присобачить еще одно поле synonym , где через разделитель будут храниться заведомо ошибочные названия? И полнотекстовый поиск будет уже производиться по полям name и synonym ? Существуют ли более разумные схемы? Мне говорили про растояние Левенштайна (функция, определяющая "степень непохожести" двух строк), но я все еще не понял, как его применить в моем случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 04:13:59 |
|
||
|
Полнотекстовый поиск с учетом ошибок
|
|||
|---|---|---|---|
|
#18+
murtukov, Это учебная задача? Если да, то максимум, на что стоит заморачиваться, имхо - прикрутить сфинкс. Если нет, то расстоянием Левенштейна тут не отделаться. Никакая программа сама по себе не догадается, что "блокнот" и "записная книжка" - это одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 05:39:47 |
|
||
|
Полнотекстовый поиск с учетом ошибок
|
|||
|---|---|---|---|
|
#18+
Нет, задача не учебная, просто я упростил ее для более быстрого вхождения именно в суть проблемы. Сфинкс планирую в любом случае прикручивать. Кстати, я ведь написал идею на счет еще одного поля synonym . Возьмем для примера одну запись из базы: id : 1 | name : Залечь на дно в Брюгге | synonym : брюге | rating : 7,35 очевидно, что не все знают о наличии двух "г" в названии "Брюгге", поэтому в поле synonym вносим слово "брюге". В Сфинксе индексируем поля name и synonym и ищем уже по ним. Механические опечатки типа "брге", "юрюгге", "брюггге" не будут учитываться. Также не будет учитываться откровенная неграмотность типа "властилин калец". В общем, планирую сделать синонимы для слов с удвоенными буквами, слов, где путаются буквы "е" и "э" (напр. Девид и Дэвид), ну а остальное буду анализировать на ходу (например "биовульф" для "Беовульф"). Вот как-то так. Что скажете о такой схеме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 07:28:33 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38848847&tid=1833728]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 355ms |

| 0 / 0 |
