2013-08-08 14 views
6

Po prostu napotkasz problem. Próbuję skonfigurować wyszukiwanie pełnotekstowe w zlokalizowanej zawartości (w szczególności w języku rosyjskim). Problemem jest domyślna konfiguracja (jak również moje niestandardowe) nie zajmuje się sprawami listowymi. Przykład:Postgresql wyszukiwanie pełnego tekstu tokenizer

SELECT * from to_tsvector('test_russian', 'На рынке появились новые рублевые облигации'); 
> 'На':1 'новые':4 'облигации':6 'появились':3 'рублевые':5 'рынке':2 

'На' jest hasłem i powinno zostać usunięte, ale nawet nie zamienia się w wektor wynikowy. Jeśli mijam małe litery ciąg, wszystko poprawnie działa

SELECT * from to_tsvector('test_russian', 'на рынке появились новые рублевые облигации'); 
> 'новые':4 'облигации':6 'появились':3 'рублевые':5 'рынке':2 

Pewnie, że może przejść pre-małe litery struny, ale instrukcja mówi

Prosty szablon słownik działa poprzez przekształcenie wejście tokena do małych liter i sprawdziany to przeciwko plikowi słów kończących.

Config russian_test wygląda następująco:

create text search CONFIGURATION test_russian (COPY = 'russian'); 

CREATE TEXT SEARCH DICTIONARY russian_simple (
    TEMPLATE = pg_catalog.simple, 
    STOPWORDS = russian 
); 

CREATE TEXT SEARCH DICTIONARY russian_snowball (
    TEMPLATE = snowball, 
    Language = russian, 
    StopWords = russian 
); 

alter text search configuration test_russian 
    alter mapping for word 
    with russian_simple,russian_snowball; 

Ale faktycznie uzyskać dokładnie takie same wyniki z wbudowanym russian config.

Próbowałem ts_debug i tokenów traktowanych jako word, jak się spodziewałem.

Wszelkie pomysły?

Odpowiedz

4

Problem rozwiązany. Powodem jest zainicjowanie bazy danych z domyślnymi ("C") CType i Collate. Użyliśmy

initdb --locale=UTF-8 --lc-collate=UTF-8 --encoding=UTF-8 -U pgsql *PGSQL DATA DIR* 

odtworzyć instancję i

CREATE DATABASE "scratch" 
    WITH OWNER "postgres" 
    ENCODING 'UTF8' 
    LC_COLLATE = 'ru_RU.UTF-8' 
    LC_CTYPE = 'ru_RU.UTF-8'; 

odtworzyć db i prosty słownik działa teraz.

Powiązane problemy