我一直在使用sqlite的FTS扩展名,似乎无法弄清楚如何在短语中搜索一列同时将其他文本与其他文本进行匹配。通常,短语搜索适用于所有列,例如:

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


对于具有以下内容的特定列:

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


但不适用于两列的汇总搜索:

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


而是抛出:

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


我发现此线程声称不可能(2011年11月):http://osdir.com/ml/sqlite-users/2011-11/msg00363.html。有人知道现在是否有可能吗?

我只能想象使用'INTERSECT'的解决方法,但是问题是,导致相交的两个结果集太大,查询会慢得多并且内存效率低下,特别是因为我将其部署在移动设备上。

谢谢。

最佳答案

你有没有尝试过:

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

09-12 03:39