我正在使用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
运算符搜索多个列时,我想知道我在这里做错了什么
更新
以下查询工作正常,但不符合我的要求,
select * from productsearch where productsearch match ('prod_name:panasonic* OR
prod_short_desc:samsung*')
您可以看到,如果删除多个令牌,那么它也可以与OR
运算符一起使用。
答案 0 :(得分:1)
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运算符的优先级太高而且无法用括号修改。
答案 1 :(得分:0)
所以,我最终找到了解决方案,
而不是单独搜索所有列,我在数据库中创建了一个包含要搜索的所需列的数据的列,
实施例
我需要搜索prod_name
& prod_short_desc
列,因此我在数据库中创建了一个名为data
的列,并附加了prod_name
&的值。 prod_short_desc
然后只查看data
字段就像魅力一样
prod_name |的 prod_short_desc 强>
samsung | samsung s5
所以,现在我将两个列的数据合并为一个空格作为分隔符
数据强>
samsung samsung s5
然后通过以下查询确实搜索非常快,
select * from productsearch where productsearch match ('samsung*s5*')