Domanda

Non ho tale tabella:

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

vorrei utente sia in grado di searh over 'text1' e '' text2 colonne, in modo che la query è

SELECT docid FROM t WHERE t MATCH ?

e richieste possibili sono:

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

D: come posso escludere 'nascosto' colonna dalla ricerca, in modo che l'utente non riesce a trovare le righe di valore nascosto?

Ho intenzione di uso 'nascosto' colonna per fare riferimento a righe in tabella secondaria con informazioni aggiuntive.

È stato utile?

Soluzione

tavolo Un FTS3 ottiene un libero colonna intero a 64 bit chiamato docid non è indicizzato. In poche parole dati aggiuntivi in ??una tabella separata, dove la chiave primaria per quel tavolo è lo stesso del docid per la tabella 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';

Altri suggerimenti

thread vecchio, ma se si sta utilizzando una build più recente di SQLite (> 3.8), è ora possibile utilizzare l'opzione notindexed, per esempio:.

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

Questo esclude la colonna dalla query partita.

Inoltre ho ottenuto questo lavoro su iOS, grazie all'integrazione di mia build di SQLite 3.8.

documentazione per l'opzione notindexed

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top