2014-09-24 7 views
8

używam FTS dla kwerend mojej bazy danych w celu zwiększenia szybkości wyszukiwania jak muszę szukać w opisie tekstowym także,wyszukiwania w wielu kolumnach Korzystanie z wyszukiwania Pełny tekst (FTS) z wielu żetonów za pomocą OR operator

Kiedy jestem próbuje kwerendy przy użyciu jednej kolumnie grzywny pracuje jak poniżej

select * from productsearch where productsearch match ('prod_name:panasonic*tw*') 

a także,

select * from productsearch where productsearch match ('prod_short_desc:samsung*s5*') 

Tak, powyżej obu zapytań mi dać oczekiwany rezultat, ale gdy próbuję aby połączyć oba pytania używając OR operator jej nie daje mi żadnych rezultatów

select * from productsearch where productsearch match ('prod_name:panasonic*tw* OR 
                 prod_short_desc:samsung*s5*') 

Tak, chcę wiedzieć, czy robię coś złego tu podczas korzystania OR operatora do przeszukiwania wielu kolumn

UPDATE

poniższe zapytanie działa poprawnie, ale to nie spełnia moje wymagania,

select * from productsearch where productsearch match ('prod_name:panasonic* OR 
                  prod_short_desc:samsung*') 

Możesz zobaczyć, że jeśli usunę wiele tokenów, to też działa dobrze z operatorem OR.

+0

Dobre pytanie :) –

+0

Nic nie wiem o FTS, ale ... czy mógłbyś spróbować: 'match ('prod_name: panasonic * tw *' LUB 'prod_short_desc: samsung * s5 *')' (oddzielone ciągi znaków w taka sama klauzula dopasowania) ** lub ** 'match ('nazwa_programu: panasonic * tw *') LUB dopasowanie (" prod_short_desc: samsung * s5 * ') '(oddzielne klauzule dopasowania)? –

+0

@ FrankN.Stein wypróbował obu, nie działa Pierwsza daje wynik, co oznacza, że ​​zakończyła pomija warunki, a druga daje złe parametry do funkcji match() –

Odpowiedz

0

Tak, znalazłem w końcu rozwiązanie,

zamiast szukać ze wszystkich kolumn indywidualnie, stworzyłem jedną kolumnę w bazie danych, która zawiera dane o wymaganych kolumn mają być przeszukiwane pod,

Przykład

muszę szukać w prod_name & prod_short_desc kolumn, więc stworzył kolumnę o nazwie data w bazie danych i dołączane wartości prod_name & prod_short_desc n przeglądanie tylko pola data działało jak czar

prod_name | prod_short_desc

samsung | samsung s5 

Więc teraz ja połączył dane z obu kolumn do jednej z przestrzeni jako separatora

dane

Samsung S5

A potem wyszukiwanie było bardzo szybkie, z poniżej zapytania,

1

FT SQLite obsługuje tylko proste wyszukiwania prefiksów.

Zapytanie jak prod_short_desc:samsung*s5* składa się z dwóch wyrażeń, prod_short_desc:samsung* i s5*, które zachowują się dokładnie tak samo jak gdyby napisane prod_short_desc:samsung* s5*.

Jeśli skompilowany SQLite dla wzmocnionej składni kwerendy, można użyć kwerendy jak:

prod_short_desc:samsung* prod_short_desc:s5* OR prod_name:panasonic* prod_name:tw* 

Jeśli skompilowany SQLite dla standardowej składni kwerendy, nie można korzystać z jednego zapytanie o to, ponieważ Operator OR jest zbyt wysoki i nie może być modyfikowany za pomocą nawiasów.

+0

ten sam problem, brak wyników! –