Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / tsearch2 - слово вне словаря / 6 сообщений из 6, страница 1 из 1
15.09.2008, 15:01
    #35539703
sourcer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tsearch2 - слово вне словаря
Допустим я есть таблица и в ней есть запись "кухонный комбайн KHR-700 мощьность 20 ват"

Еслия делаю запрос
SELECT * FROM mytest WHERE fts_title @@ to_tsquery('mydict_ru','KHR-700');

то мне естветсвенно ничего не выдатся.

Как сделать так что бы tsearch умел находить подобные слова которых нет в словаре?
...
Рейтинг: 0 / 0
15.09.2008, 16:20
    #35540070
sourcer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tsearch2 - слово вне словаря
Ну ктонибудь помогите решить задачку... плиз...
...
Рейтинг: 0 / 0
15.09.2008, 16:27
    #35540090
sourcer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tsearch2 - слово вне словаря
Я конечно вижу решение но все же мне надо понять каким путем правильно идти.

Ну допустим все чего нет в словарях то и не ищится, хорошо. Тогда предположив что мой сайт это сайт определенной тематики и у меня есть статстика слов которы наиболее часто ищат, я из этой статистики могу пополнять словарь... тоесть если часто встречаются слова AUDI и их вводили более чем 1000 раз то я действительно мог бы добавить его в словарь. Правильно ли это, сам подход?
Но! Допустим что теоритически это правильно, но что делать с такими фразами как AUDI A6. Тоесть если в словарь и уйдет слово AUDI то A6 я врядли туда добавлю так как слово из 2х букв, это очень накладно, либо же надо более сложный анализ статистики запросов делать где учитывать наиболее частые и комбинации слов.

Как быть подскажите?
...
Рейтинг: 0 / 0
15.09.2008, 16:38
    #35540128
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tsearch2 - слово вне словаря
sourcerто мне естветсвенно ничего не выдатся.почему "естественно" ? у меня - выдаётся :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
seb=> select * from p where f @@ plainto_tsquery('russian', 'KHR-700');
                     v                     |                                   f
-------------------------------------------+-----------------------------------------------------------------------
 кухонный комбайн KHR- 700  мощьность  20  ват | '20': 6  'khr': 3  '-700': 4  'ват': 7  'комбайн': 2  'кухонный': 1  'мощьност': 5 
( 1  запись)

Время:  0 , 597  мс
seb=> \dF+ russian
Text search configuration "pg_catalog.russian"
Parser: "pg_catalog.default"
      Token      |        Dictionaries
-----------------+-----------------------------
 asciihword      | english_stem
 asciiword       | english_stem
 email           | simple
 file            | simple
 float           | simple
 host            | simple
 hword           | russian_ispell,russian_stem
 hword_asciipart | english_stem
 hword_numpart   | simple
 hword_part      | russian_ispell,russian_stem
 int             | simple
 numhword        | simple
 numword         | simple
 sfloat          | simple
 uint            | simple
 url             | simple
 url_path        | simple
 version         | simple
 word            | russian_ispell,russian_stem
...
Рейтинг: 0 / 0
15.09.2008, 17:14
    #35540269
sourcer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tsearch2 - слово вне словаря
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
select * from mytest where fts_title @@ plainto_tsquery('russian', 'KHR-700');

на выходе ноль... подскажите почему так?

mydb=# \dF+ russian
Text search configuration "pg_catalog.russian"
Parser: "pg_catalog.default"
      Token      | Dictionaries
-----------------+--------------
 asciihword      | english_stem
 asciiword       | english_stem
 email           | simple
 file            | simple
 float           | simple
 host            | simple
 hword           | russian_stem
 hword_asciipart | english_stem
 hword_numpart   | simple
 hword_part      | russian_stem
 int             | simple
 numhword        | simple
 numword         | simple
 sfloat          | simple
 uint            | simple
 url             | simple
 url_path        | simple
 version         | simple
 word            | russian_stem

почему так ? тут даже не в словарях помоему дело а в генерации вектора
после генерации вот что выходит в таблице, в нее не попадают слова которые вне словаря:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
av=# SELECT * FROM mytest;
 id |                   title                   |             short_description             |            fts_title            |       fts_short_description  
----+-------------------------------------------+-------------------------------------------+---------------------------------+------------------------------------
   1  | продам машину                             | дорого продам машину                      | 'машина': 2  'продать': 1           | 'машина': 3  'дорогой': 1  'продать': 2 
   2  | продам кошку                              | дорого продам кота                        | 'кошка': 2  'продать': 1            | 'кот': 3  'дорогой': 1  'продать': 2 
   3  | продам кота перситского                   | котик                                     | 'кот': 2  'продать': 1              | 'котик': 1 
   4  | продам дорогого кота                      | кошка                                     | 'кот': 3  'дорогой': 2  'продать': 1  | 'кошка': 1 
   7  | кухонный комбайн KHR- 700  мощьность  20  ват | кухонный комбайн KHR- 700  мощьность  20  ват | 'комбайн': 2  'кухонный': 1         |
   5  | аппарат HRF- 70  купить                     | газовое оборудовние                       | 'купить': 2  'аппарат': 1           | 'газовый': 1 
   6  | auto cars                                 | газовое оборудовние                       | 'car': 2  'auto': 1                 | 'газовый': 1 
( 7  rows)
...
Рейтинг: 0 / 0
15.09.2008, 18:52
    #35540556
Oleg Bartunov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tsearch2 - слово вне словаря
Используй функцию ts_debug и сравни с to_tsquery. Внизу привел стандартный способ дебугирования, запомните его !

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
postgres=# select * from ts_debug('english','KHR-70');
   alias   |   description   | token |  dictionaries  |  dictionary  | lexemes 
-----------+-----------------+-------+----------------+--------------+---------
 asciiword | Word, all ASCII | KHR   | {english_stem} | english_stem | {khr}
 int       | Signed integer  | - 70    | {simple}       | simple       | {- 70 }
( 2  rows)
postgres=# select to_tsquery('russian','KHR-70');
  to_tsquery   
---------------
 'khr' & '-70'
( 1  row)
postgres=# select to_tsvector('russian','KHR-70') @@ to_tsquery('russian','KHR-70');
 ?column? 
----------
 t
( 1  row)

sourcer
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
select * from mytest where fts_title @@ plainto_tsquery('russian', 'KHR-700');

на выходе ноль... подскажите почему так?

mydb=# \dF+ russian
Text search configuration "pg_catalog.russian"
Parser: "pg_catalog.default"
      Token      | Dictionaries
-----------------+--------------
 asciihword      | english_stem
 asciiword       | english_stem
 email           | simple
 file            | simple
 float           | simple
 host            | simple
 hword           | russian_stem
 hword_asciipart | english_stem
 hword_numpart   | simple
 hword_part      | russian_stem
 int             | simple
 numhword        | simple
 numword         | simple
 sfloat          | simple
 uint            | simple
 url             | simple
 url_path        | simple
 version         | simple
 word            | russian_stem

почему так ? тут даже не в словарях помоему дело а в генерации вектора
после генерации вот что выходит в таблице, в нее не попадают слова которые вне словаря:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
av=# SELECT * FROM mytest;
 id |                   title                   |             short_description             |            fts_title            |       fts_short_description  
----+-------------------------------------------+-------------------------------------------+---------------------------------+------------------------------------
   1  | продам машину                             | дорого продам машину                      | 'машина': 2  'продать': 1           | 'машина': 3  'дорогой': 1  'продать': 2 
   2  | продам кошку                              | дорого продам кота                        | 'кошка': 2  'продать': 1            | 'кот': 3  'дорогой': 1  'продать': 2 
   3  | продам кота перситского                   | котик                                     | 'кот': 2  'продать': 1              | 'котик': 1 
   4  | продам дорогого кота                      | кошка                                     | 'кот': 3  'дорогой': 2  'продать': 1  | 'кошка': 1 
   7  | кухонный комбайн KHR- 700  мощьность  20  ват | кухонный комбайн KHR- 700  мощьность  20  ват | 'комбайн': 2  'кухонный': 1         |
   5  | аппарат HRF- 70  купить                     | газовое оборудовние                       | 'купить': 2  'аппарат': 1           | 'газовый': 1 
   6  | auto cars                                 | газовое оборудовние                       | 'car': 2  'auto': 1                 | 'газовый': 1 
( 7  rows)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / tsearch2 - слово вне словаря / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]