Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите запустить полнотекстовый поиск в 8.3
|
|||
|---|---|---|---|
|
#18+
Уважаемые знатоки Postgresql, такая проблема: На WinXP установлен PostgreSQL 8.3. Есть таблица my_catalogs (id serial, text tsvector). Создал я таблицу, занем туда несколько строк для теста. Как мне организовать полнотекстовый поиск в данной таблице, так что бы работало! Прочитал документацию и мало что понял - я не ИТ специалист. Вот собственно и прошу помощи: 1. как создать индекс по полю text 2. как сделать так, что бы этот индекс обновлялся при вводе новых данных 3. как производить поиск по некоторым ключевым словам (2 -3 слова или какое-нибудь предложение). Помогите примером, очень нужно!!! Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 14:23 |
|
||
|
Помогите запустить полнотекстовый поиск в 8.3
|
|||
|---|---|---|---|
|
#18+
У меня тоже стоит задача запустить полнотекстовый поиск, только на Linux. В Вашем примере в таблице my_catalogs должно быть 3 поля: id - код, text - оригинал текста, vect_text - векторное (обработанное) представление текста CREATE TABLE my_catalogs (id serial, text text, vect_text tsvector); 1. Создание индексов: CREATE INDEX my_catalog_id_idx ON my_catalog(id); CREATE INDEX my_catalog_text_idx ON my_catalog(text); 2. При добавлении данных индекс будет обновляться автоматически. А вот для автоматического обновления векторного представления текста нужно написать триггер: CREATE OR REPLACE FUNCTION my_catalog_ins() RETURNS trigger AS $$ BEGIN NEW.vect_text = to_tsvector(NEW.text); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER my_catalog_ins_trigger BEFORE INSERT OR UPDATE ON my_catalog FOR EACH ROW EXECUTE PROCEDURE my_catalog_ins(); 3. Поиск производить так: SELECT id FROM my_catalog WHERE 'alpha&beta&gamma...'::tsquery @@ vect_text; или так SELECT id FROM my_catalog WHERE to_tsquery('alpha&beta&gamma...') @@ vect_text; где alpha, beta, gamma - искомые слова ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 17:45 |
|
||
|
Помогите запустить полнотекстовый поиск в 8.3
|
|||
|---|---|---|---|
|
#18+
А вот у меня такая проблема. Как работать с полнотекстовым поиском я примерно понял, а вот как подключить всякие словари-тезаурусы и т.п. штуки, чет не могу понять. Может кто уже работал с этим, подскажите, че искать, куда копировать, как подключать. А то у меня поиск не правильно работает с русскими окончаниями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 17:49 |
|
||
|
Помогите запустить полнотекстовый поиск в 8.3
|
|||
|---|---|---|---|
|
#18+
перво-наперво, нужно понять, какие нужны словари. Есть словари подмен, в которых вы сами можете написать синонимы. слово синоним слово2 -синоним и т.д. строчка за строчкой. Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. И те и другие можно скачать, если нет в вашей поставке. Для 8.3 все словари должны быть в кодировке utf-8, независимо от кодировки вашего кластера и локали. Словари лежат в /usr/share/postgresXX/tsearch_data или что то в этом роде. Не побрезгуйте посмотреть. Там есть примеры. У файлов словарей расширения: *.affix - суффиксы словоформ *.dict - собственно словари *.stop - стоп-слова (местоимения, предлоги и т.д.) В определениях словарей, которые я привел выше, эти суффиксы не указаны, но они подразумеваются . Есть конструкция для определения словарей со включением полного имени файла и пути к нему, но у меня она не работает. Далее, можно определить собственную конфигурацию со своими словарями: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 21:12 |
|
||
|
Помогите запустить полнотекстовый поиск в 8.3
|
|||
|---|---|---|---|
|
#18+
Сегодня на основе ваших рекомендаций попробовал замутить такую конфигурацию: BEGIN; CREATE TEXT SEARCH DICTIONARY mydict_russian_ispell ( TEMPLATE = ispell, DictFile = russian, AffFile = russian, StopWords = russian ); CREATE TEXT SEARCH DICTIONARY mydict_russian_auto_synonyms ( -- Мой словарь синонимов автомобильной направленности TEMPLATE = synonym, SYNONYMS = russian_auto ); CREATE TEXT SEARCH DICTIONARY mydict_russian_stem ( TEMPLATE = snowball, Language = russian, StopWords = russian ); CREATE TEXT SEARCH CONFIGURATION public.mydict_ru (PARSER = default); COMMENT ON TEXT SEARCH CONFIGURATION public.mydict_ru IS 'conf. for mydict ru'; ALTER TEXT SEARCH CONFIGURATION mydict_ru ADD MAPPING FOR email, url, url_path, host, file, version, sfloat, float, int, uint, numword, hword_numpart, numhword WITH simple; /* Пришлось закомментировать, т.е. при компиляции Postgres "ругалсо" ALTER TEXT SEARCH CONFIGURATION mydict_ru ADD MAPPING FOR asciiword, hword_asciipart, asciihword WITH mydict_english_ispell, english_stem; */ ALTER TEXT SEARCH CONFIGURATION mydict_ru ADD MAPPING FOR word, hword_part, hword WITH mydict_russian_auto_synonyms, mydict_russian_stem, mydict_russian_ispell; END; ISpell вроде бы работает. Проверял конструкцией: # SELECT ts_lexize('mydict_russian_ispell', 'подшипника'); ts_lexize ------------- {подшипник} (1 row) Да и словарь синонимов работает. Только мне хотелось бы использовать в словаре синонимы, которые включают в себя два-три-четыре слова. Например: "ШРУС" - "шарнир равных угловых скоростей" или "стекло ветровое" - "стекло лобовое". Сейчас словарь синонимов понимает только одно слово и поэтому для слова "стекло" выдает синоним "ветровое". Как решить эту проблему? Пробовал применять ', ", {} - не работает. И еще вопрос. Ispell не знает некоторых автомобильных терминов. Например, не знает слов "тосол" и "бендикс". Где найти описание, как нужные слова можно добавить в словарь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 11:07 |
|
||
|
Помогите запустить полнотекстовый поиск в 8.3
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 12:16 |
|
||
|
Помогите запустить полнотекстовый поиск в 8.3
|
|||
|---|---|---|---|
|
#18+
Попробовал конфигурацию в деле. Запрос # SELECT ИМЯ FROM прайс WHERE 'подшипник&ступиц ы &2101'::tsquery @@ ВЕКТОР; выдал 21 строку из справочника. Подшипник ступицы 2101 бол. АТ Подшипник ступицы 2101 мал. АТ Подшипник ступицы 2101 передн. KRAFT (компл.) Подшипник ступицы 2101 передн. Herzog (2шт.) (Германия) Подшипник ступицы 2101 передний внутрен. WEGO (Чехия) Подшипник ступицы 2101 передний наружн. WEGO (Чехия) Подшипник ступицы 2101 передн. бол Master-Sport (26*57,15*17,46) (Германия) Подшипник ступицы 2101 передн.мал. Master-Sport (19,5*45,25*16,63) (Германия) ... (21 rows) А запрос # SELECT ИМЯ FROM прайс WHERE 'подшипник&ступиц а &2101'::tsquery @@ ВЕКТОР; не выдал ни одной строки, хотя справочник ispell присутствует и как будто работает: # SELECT ts_lexize('mydict_russian_ispell', 'ступицы'); ts_lexize ----------- {ступица} (1 row) Почему морфологический разбор не работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 12:39 |
|
||
|
Помогите запустить полнотекстовый поиск в 8.3
|
|||
|---|---|---|---|
|
#18+
используйте тег SRC сообщениях: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 16:18 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35201430&tid=2004512]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
36ms |
get tp. blocked users: |
2ms |
| others: | 252ms |
| total: | 373ms |

| 0 / 0 |
