SQL поиск как в google
От: javabear  
Дата: 23.11.09 15:45
Оценка: :))
Друзья, задача следующая
организовать поиск по базе данных в стиле современных поисковиков , что есть:
— поиск всех вариаций слова
— поиск с учетом опечаток
— поиск частичной фразы

Все классно, есть штатные средсва SQL ссервера (функция Freetextable), которые решают основную массу задач Но! она не учитует опечаток.
На сколько я понимаю, мне остается достать словарь тезауруса опечаток.
Кто нибудь встречал такой ? отзовитесть БД спецы ...

Спасибо за внимание к моей задаче.
Сергей.
sql тезаурус поиск
Re: SQL поиск как в google
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 23.11.09 16:18
Оценка:
Здравствуйте, javabear, Вы писали:

J>Все классно, есть штатные средсва SQL ссервера (функция Freetextable), которые решают основную массу задач Но! она не учитует опечаток.

J>На сколько я понимаю, мне остается достать словарь тезауруса опечаток.

Гм, если я наберу в строке поиска какую-нить гадость — мне Гугл честно ответит, что ничего не нашел. Как бы не пришлось прикручивать словарь словоформ еще.
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[2]: SQL поиск как в google
От: Аноним  
Дата: 23.11.09 16:21
Оценка:
soundex() слегка поможет ...
Re[3]: SQL поиск как в google
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 23.11.09 16:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>soundex() слегка поможет ...


Soundex имеет сильную зависимость от языка, слова которого сравниваются при поиске. Если данные хранятся на 2-х,3-х языках — уже начинаются пляски с бубном.
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[4]: SQL поиск как в google
От: javabear  
Дата: 23.11.09 17:27
Оценка:
Здравствуйте, DarkMaster, Вы писали:

DM>Здравствуйте, Аноним, Вы писали:


А>>soundex() слегка поможет ...


DM>Soundex имеет сильную зависимость от языка, слова которого сравниваются при поиске. Если данные хранятся на 2-х,3-х языках — уже начинаются пляски с бубном.


Все гараздо проще :
Язык английский только.

soundex не подходит тк при его интеграции с sql сервером будут потери в производительности изза того что не удастца оптимизировать + сама интеграция займет не известно сколько времени , это дороговато.

по поводу замечаний о гугле , все грамматические словоформы ищутся штатными средсвами итак, необходимо искать с опечатками ,
а точнее мне кажется с созвучными словами тк опечатки это похожие символы например volunteer uo1unteer, гугл такое сам не очень курит...
Re[5]: SQL поиск как в google
От: Аноним  
Дата: 23.11.09 17:34
Оценка:
J>soundex не подходит тк при его интеграции с sql сервером будут потери в производительности изза того что не удастца оптимизировать + сама интеграция займет не известно сколько времени , это дороговато.

какая нафиг интеграция ? приличные SQL сервера штатно имеют эту функцию ...
Re[6]: SQL поиск как в google
От: javabear  
Дата: 23.11.09 18:54
Оценка:
Здравствуйте, Аноним, Вы писали:

J>>soundex не подходит тк при его интеграции с sql сервером будут потери в производительности изза того что не удастца оптимизировать + сама интеграция займет не известно сколько времени , это дороговато.


А>какая нафиг интеграция ? приличные SQL сервера штатно имеют эту функцию ...


можеш считать MSSQL неприличным, но в нем я не нашел подобного
например по слову 'mens' ( воля в переводе) должно поидее находить 'man' man's men's men (мужской мужчина(ы)) тк оно очень похоже на опечатку. Нифига(ничего) подобного не происходит.
Re[7]: SQL поиск как в google
От: Аноним  
Дата: 23.11.09 21:37
Оценка:
ну возьми более приличный оракл ...

SQL> create table words (word varchar2(50)) ;

Table created.

SQL> insert into words values ('Just');

1 row created.

SQL> insert into words values ('arms');

1 row created.

SQL> insert into words values ('curvature');

1 row created.

SQL> insert into words values ('radius');

1 row created.

SQL> insert into words values ('man');

1 row created.

SQL> commit ;

Commit complete.

SQL> create index soundex_idx on words (soundex(word)) ;

Index created.

SQL> set autotrace on ;
SQL> select * from words where soundex(word)=soundex('men') ;

WORD
--------------------------------------------------
man


Execution Plan
----------------------------------------------------------
Plan hash value: 973613626

-------------------------------------------------------------------------------------------

| Id  | Operation                   | Name        | Rows  | Bytes | Cost (%CPU)| Time     |

-------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT            |             |     1 |    27 |     2   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| WORDS       |     1 |    27 |     2   (0)| 00:00:01 |

|*  2 |   INDEX RANGE SCAN          | SOUNDEX_IDX |     1 |       |     1   (0)| 00:00:01 |

-------------------------------------------------------------------------------------------
soundex
Re[8]: SQL поиск как в google
От: javabear  
Дата: 24.11.09 13:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>ну возьми более приличный оракл ...

А>Execution Plan
А>----------------------------------------------------------
А>Plan hash value: 973613626

А>-------------------------------------------------------------------------------------------


А>| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |


А>-------------------------------------------------------------------------------------------


А>| 0 | SELECT STATEMENT | | 1 | 27 | 2 (0)| 00:00:01 |


А>| 1 | TABLE ACCESS BY INDEX ROWID| WORDS | 1 | 27 | 2 (0)| 00:00:01 |


А>|* 2 | INDEX RANGE SCAN | SOUNDEX_IDX | 1 | | 1 (0)| 00:00:01 |


А>-------------------------------------------------------------------------------------------



Спасибо добрый человек Аноним, я седня до этого сам уже дошел ...
Я сперва подумал , что soundex это перловая библиотека и не подозревал о функциональных индексах в MSSQL, так что предложеное решение довольно приличное, только у меня задача полнотекстового поиска. SoundEx же по заявлениям микрософт плохо работает с пробелами , те для фраз и предложений не годится (http://msdn.microsoft.com/en-us/magazine/cc163731.aspx) еще есть аналоги soundex как утверждают авторы, гараздо лучше работают (http://anastasiosyal.com/archive/2009/01/11/18.aspx) но это все равно не то, тк нет работы с предложениями, а только отдельными словами.
Я щас копаю в сторону fuzzy search (http://msdn.microsoft.com/en-us/library/ms345128(SQL.90).aspx#fzdtssql05_intres)
вроде это как раз для моей задачи, но как то все мутно пока, какието Бизнес интелидженс проекты, пока я запутался.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.