我正在使用FTS查询我的数据库以提高搜索速度,因为我还需要在文本描述中搜索,
当我尝试使用单列查询时,其工作正常,如下所示
select * from productsearch where productsearch match ('prod_name:panasonic*tw*')
并且,
select * from productsearch where productsearch match ('prod_short_desc:samsung*s5*')
因此,在两个查询之上给出了我预期的结果,但是当我尝试使用OR运算符组合两个查询时它没有给我任何结果
select * from productsearch where productsearch match ('prod_name:panasonic*tw* OR prod_short_desc:samsung*s5*')
所以,我想知道在使用OR运算符搜索多个列时我是否在做错了什么
UPDATE
以下查询工作正常,但不符合我的要求,
select * from productsearch where productsearch match ('prod_name:panasonic* OR prod_short_desc:samsung*')
您可以看到,如果我删除多个令牌,那么它也可以使用OR运算符正常工作.
解决方法
sqlite的FTS仅支持简单的前缀搜索.
像prod_short_desc:samsung * s5 *这样的查询由两个表达式组成,prod_short_desc:samsung *和s5 *,其行为与编写prod_short_desc:samsung * s5 *完全相同.
如果已经为增强的查询语法编译了sqlite,则可以使用如下查询:
prod_short_desc:samsung* prod_short_desc:s5* OR prod_name:panasonic* prod_name:tw*
如果已为标准查询语法编译sqlite,则不能对此使用单个查询,因为OR运算符的优先级太高而无法使用括号修改.