2010-10-12 16 views
6

mam taką tabelę:Jak wykluczyć kolumnę z FTS3 tabeli wyszukiwania

CREATE VIRTUAL TABLE t USING FTS3(hidden, text1, text2) 

Chciałbym użytkownika, aby móc searh nad „text1” i kolumny „Text2”, więc zapytanie jest

SELECT docid FROM t WHERE t MATCH ? 

a ewentualne wnioski są następujące:

SELECT docid FROM t WHERE t MATCH 'foo' 
SELECT docid FROM t WHERE t MATCH 'text1:foo OR text2:bar' 

Q: jak mogę wykluczyć „ukryte” kolumna z wyszukiwarki, dzięki czemu użytkownik nie może znaleźć wiersze o ukrytej wartości?

Zamierzam użyć "ukrytej" kolumny, aby odnieść się do wierszy w tabeli pomocniczej z dodatkowymi informacjami.

Odpowiedz

6

Tabela FTS3 pobiera bezpłatną 64-bitową kolumnę całkowitą o nazwie docid, która nie jest indeksowana. Po prostu umieść dodatkowe dane w osobnej tabeli, w której klucz główny dla tej tabeli jest taki sam jak docid dla tabeli FTS3.

CREATE VIRTUAL TABLE t USING FTS3(text1, text2); 

CREATE TABLE additional (id INTEGER PRIMARY KEY, hidden VARCHAR); 

INSERT INTO t (docid, text1, text2) VALUES (243, 'foo', 'bar'); 
INSERT INTO additional VALUES (243, 'bas'); 

SELECT docid, text1, text2, hidden FROM t JOIN additional ON t.docid = additional.id WHERE t MATCH 'foo'; 
11

stary wątek, ale jeśli używasz nowszej kompilacji SQLite (> 3,8), można teraz korzystać z opcji notindexed, np

CREATE VIRTUAL TABLE t USING FTS4(uuid, document, notindexed=uuid); 

To wykluczy kolumnę z meczu zapytania.

Też pracuję nad iOS, osadzając własną kompilację SQLite 3.8.

Documentation for notindexed option

Powiązane problemy