我正在学习如何在 SQlite 中使用FTS4并尝试翻译如下内容:
SELECT * FROM table
WHERE (postal_code LIKE q1 OR place_name LIKE q1) AND (address LIKE q2)
它与普通表完美配合,类似于:
SELECT * FROM table
WHERE table MATCH '(postal_code: q1 OR place_name: q1) AND (address: q2)'
这不适用于转换为 VIRTUAL .. USING fts4 的同一张表...
使用“ : ”在特定列中搜索匹配是有效的,但我如何将它与 OR 和 AND 结合使用?
背景 - 我尝试使用灵活的查询,其中 q1 可以是两者之一:邮政编码或地名,q2 必须是地址。
编辑:
这就是我到目前为止(部分)工作的结果
SELECT * FROM table WHERE table MATCH ('postal_code:q1 OR place_name:q1')
INTERSECT
SELECT * FROM table WHERE table MATCH ('address:q2');
(基于@CL的这篇文章)
这里的第一个问题是带空格的单词 - 如果我搜索类似
...MATCH ('postal_code:"new haven*" OR place_name:"new_haven*"')
然后我有“格式错误的 MATCH 表达式”第二个问题是当我有空查询时,比如
...MATCH ('*')
然后我什么也得不到