![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 1.06.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Próbuję przejść na wyszukiwanie pełnotekstowe, jednak już na samym początku pojawiły się problemy. Korzystając z: http://www.postgresql.org/docs/8.3/static/...rch-tables.html chciałem wykonać najprostsze wyszukiwanie bez indeksów, czyli jak z przykładu:
Czyli pobieram kolumnę title z tabeli pgweb, gdzie znajdzie się słowo 'friend'. Przerobiłem to pod swoje dane, ale mam błąd związany z 'body' - myślałem, że po prostu tu ma zawsze być body, ale okazuje się że nie. Czym więc jest to body (jakieś pole?) i jak zrobić, żeby to działało ? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 319 Pomógł: 118 Dołączył: 26.11.2003 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
z tego co tam czytam to jest to kolumna, w której chcesz szukać tekstu (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 1.06.2013 Ostrzeżenie: (0%) ![]() ![]() |
Przecież 'title' jest kolumną w której chcę szukać tekstu !?
A jeśli nie to czym w takim razie jest 'title' (IMG:style_emoticons/default/questionmark.gif) ? Ten post edytował yafu 18.07.2013, 09:21:21 |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
W Twoim przykładzie: title jest kolumną, którą zwracasz w wyniku zapytania, a wyszukujesz po kolumnie body. Kolumna body musi być typu tsvector. Czyli chcąc zrobić wyszukiwanie po title musisz dodać nową kolumnę np. title_tsv i jej użyć w wyszukiwaniu. Wartość tej kolumny najlepiej aktualizować triggerem w momencie zmiany wartości kolumny title.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 1.06.2013 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za info, teraz już rozumiem o co chodzi.
Mam jednak jeszcze pytanie, bo napisałeś, że kolumna musi być typu tsvector - ja przed chwilą wyszukiwałem w ten sposób po kolumnie typu character varying:
I działa, zwraca odpowiednie rekordy, co prawda długo to trwa (baza kilka Gb a docelowo ma mieć kilkaset, więc już się boję), fakt nie ma pozakładanych indeksów... Tak czy inaczej działa to na kolumnie bez tsvector, a napisałeś że kolumna musi być tsvector ? Czy to przyśpieszy wykonywanie zapytań jeśli ją konwertuje do tsvector ? (nie mogę robić oddzielnej kolumny triggerem tak jak zasugerowałeś, gdyż baza i tak będzie ogromna i muszę ją jak najbardziej odchudzać, więc taka nadmiarowość odpada). |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Działa wolno z racji tego:
to_tsvector('english', it_name) Dla każdego wiersza przekształcasz dane na tsvector. Dodając osobną kolumnę typu tsvector możesz skorzystać z: kolumna @@ to_tsquery... Czyli wyszukujesz już na gotowych danych typu tsvector. Dodatkowo na tej kolumnie załóż indeks gist i powinno być zdecydowanie lepiej. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 1.06.2013 Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem, a czy możesz mi jeszcze pomóc i podpowiedzieć jak przekształcić kolumnę character_varying do tsvector ?
Próbując to zrobić bezpośrednio z pgadmina dostaję info: ERROR: column "it_name" cannot be cast to type tsvector, jednak chyba jakoś się da ? ? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 1.06.2013 Ostrzeżenie: (0%) ![]() ![]() |
Teoretycznie poszlo, ale wiedziałem, że będzie błąd z nietypowymi znakami bo pojawia się:
ERROR: syntax error in tsvector: "*kaczka*" Czyli przy '*' nie przechodzi już... Można to jakoś obejść ? Jeśli nie to w takim razie jak zapisywać do kolumy typu ts_vector takie 'nietypowe' znaki ? Ten post edytował yafu 31.07.2013, 14:18:50 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 04:04 |