Друзья, задача следующая
организовать поиск по базе данных в стиле современных поисковиков , что есть:
— поиск всех вариаций слова
— поиск с учетом опечаток
— поиск частичной фразы
Все классно, есть штатные средсва SQL ссервера (функция Freetextable), которые решают основную массу задач Но! она не учитует опечаток.
На сколько я понимаю, мне остается достать словарь тезауруса опечаток.
Кто нибудь встречал такой ? отзовитесть БД спецы ...
Здравствуйте, javabear, Вы писали:
J>Все классно, есть штатные средсва SQL ссервера (функция Freetextable), которые решают основную массу задач Но! она не учитует опечаток. J>На сколько я понимаю, мне остается достать словарь тезауруса опечаток.
Гм, если я наберу в строке поиска какую-нить гадость — мне Гугл честно ответит, что ничего не нашел. Как бы не пришлось прикручивать словарь словоформ еще.
Здравствуйте, Аноним, Вы писали:
А>soundex() слегка поможет ...
Soundex имеет сильную зависимость от языка, слова которого сравниваются при поиске. Если данные хранятся на 2-х,3-х языках — уже начинаются пляски с бубном.
Здравствуйте, DarkMaster, Вы писали:
DM>Здравствуйте, Аноним, Вы писали:
А>>soundex() слегка поможет ...
DM>Soundex имеет сильную зависимость от языка, слова которого сравниваются при поиске. Если данные хранятся на 2-х,3-х языках — уже начинаются пляски с бубном.
Все гараздо проще :
Язык английский только.
soundex не подходит тк при его интеграции с sql сервером будут потери в производительности изза того что не удастца оптимизировать + сама интеграция займет не известно сколько времени , это дороговато.
по поводу замечаний о гугле , все грамматические словоформы ищутся штатными средсвами итак, необходимо искать с опечатками ,
а точнее мне кажется с созвучными словами тк опечатки это похожие символы например volunteer uo1unteer, гугл такое сам не очень курит...
Re[5]: SQL поиск как в google
От:
Аноним
Дата:
23.11.09 17:34
Оценка:
J>soundex не подходит тк при его интеграции с sql сервером будут потери в производительности изза того что не удастца оптимизировать + сама интеграция займет не известно сколько времени , это дороговато.
какая нафиг интеграция ? приличные SQL сервера штатно имеют эту функцию ...
Здравствуйте, Аноним, Вы писали:
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 |
-------------------------------------------------------------------------------------------
Здравствуйте, Аноним, Вы писали:
А>ну возьми более приличный оракл ... А>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)
вроде это как раз для моей задачи, но как то все мутно пока, какието Бизнес интелидженс проекты, пока я запутался.