2016-06-03 12 views
0

ich FTS4 mit sqlite 3.8.10 mit und ich versuche, ein Schema wie so einzurichten:SQLite FTS4 externe Inhalte ohne Spaltennamen mit Blick

CREATE TABLE Test (name TEXT); 
CREATE VIEW TestView as SELECT name FROM Test; 
CREATE VIRTUAL TABLE TestFTS using FTS4(content="TestView", name); 

In diesem Spielzeug Beispiel habe ich eine einfache Tabelle, Test und eine Ansicht, TestView, die dieser Tabelle entspricht. Ich erstelle einen FTS4 Index, TestFTS aus der Sicht.

Dann füllen ich einige Daten wie folgt:

INSERT INTO Test VALUES ('bob'); 
INSERT INTO Test VALUES ('bill'); 
INSERT INTO Test VALUES ('jane'); 
INSERT INTO TestFTS(TestFTS) VALUES ('rebuild'); 

So weit so gut. Jetzt möchte ich meine Daten abfragen, zum Beispiel:

SELECT name FROM TestFTS WHERE name MATCH "b*"; 

Diese zwei Zeilen zurückgeben sollte:

bob

Rechnung

Stattdessen gibt es eine einzelne Zeile und dass Zeile ist leer. Wenn ich alle Daten aus der TestFTS Tabelle abfragen, dann kann ich die Werte sehen, aber offensichtlich ist es nicht viel, wenn ich nicht MATCH Typ Abfragen tun kann:

SELECT name FROM TestFTS; 

bob

Rechnung

jane

Jede Idee, warum SQLite wird die Daten nicht zurückkehrt, oder auch die richtige Anzahl von Zeilen, wHE n mit MATCH Abfragen auf externen Inhalt VIEW s ohne Spaltennamen?

====

UPDATE: Ich habe versucht, sqlite 3.13 mit dem Namen Spaltenansichten verwenden und ich das gleiche Problem zu sehen.

Antwort

1

Die documentation sagt:

Wenn ein Benutzer Abfrage auf der FTS Tabelle eine Spalte anderen Wert als docid erfordert, FTS versucht, den gewünschten Wert aus der entsprechenden Spalte der Zeile in der Inhaltstabelle mit einem lesen rowid-Wert, der dem aktuellen FTS-Dokument entspricht.

So die Ansicht muss eine eindeutige Spalte umfassen rowid genannt, die docid auf die FTS Tisch entspricht.