2012-04-03 4 views
2

Ich habe die FTS-Erweiterung von SQLite verwendet, und kann nicht herausfinden, wie man eine Phrasensuche für eine Spalte ausführt, während ein anderer Text für etwas anderes passt. In der Regel eine Phrasensuche zu tun funktioniert für alle Spalten wie:FTS SQLite-Phrasensuche für einzelne Spalte nicht möglich

SELECT * from ftstable where ftstable MATCH '"Phrase With Spaces In It"'; 

und für eine bestimmte Spalte mit:

SELECT * from ftstable where body MATCH '"Phrase With Spaces In It"'; 

funktioniert aber nicht für eine aggregierte Suche in zwei Spalten wie:

SELECT * from ftstable where ftstable MATCH 'body:"Phrase With Spaces In It" title:"The*"'; 

und stattdessen wirft:

Error: malformed MATCH expression: [body:"Phrase With Spaces In It" title:"The*"] 

Ich habe diesen Thread gefunden, der behauptet, dass es nicht möglich ist (November 2011): http://osdir.com/ml/sqlite-users/2011-11/msg00363.html. Weiß jemand, ob das jetzt möglich ist?

Ich kann mir nur eine Umgehung mit einem "INTERSECT" vorstellen, aber das Problem ist dann die resultierenden zwei Sätze, die geschnitten werden, sind zu groß und die Abfrage wird viel langsamer und Speicher ineffizient sein, vor allem, da ich dies auf einem mobilen Gerät bereitstellen .

Danke.

Antwort

3

Haben Sie versucht:

SELECT * FROM ftstable WHERE (ftstable MATCH 'body:"phrase with spaces in it"') AND (ftstable MATCH 'title:The*') 
+0

Vielleicht soll es OR statt AND sein ... –

+0

Nein, UND ist richtig, er sagte, er will Streichhölzer für beide finden. –

1

Alle Filter mit einer Spalte Spezifikations darf keine Leerzeichen enthalten. Es funktioniert einfach nicht. Es ist komisch, aber wahr. col1: abc funktioniert, col1: "abc" nicht. col1: "abc 123" nicht (es passt nur zu jeder Spalte mit "abc 123" int it).

Verwandte Themen