使用OR操作符使用全文search(FTS)和多个标记进行多列search

我正在使用FTS查询我的数据库,以提高search速度,因为我也需要在文本描述search,

当我试图查询使用单列它的工作很好,如下所示

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运算符来search多列时,我在这里做了什么错误

UPDATE

下面的查询工作正常,但不符合我的要求,

 select * from productsearch where productsearch match ('prod_name:panasonic* OR prod_short_desc:samsung*') 

你可以看到,如果我删除了多个令牌,那么它的OR运算符也可以正常工作。

Solutions Collecting From Web of "使用OR操作符使用全文search(FTS)和多个标记进行多列search"

SQLite的FTS只支持简单的前缀search。

prod_short_desc:samsung*s5*这样的查询prod_short_desc:samsung*s5*由两个expression式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运算符的优先级太高,不能用圆括号修改。

于是,我终于find了解决办法,

我不是从所有的列中单独search,而是在数据库中创build了一个包含要search的列的数据的列,

我需要在prod_nameprod_short_desc列中进行search,所以我在数据库中创build了一个名为data的列,并附加了prod_nameprod_short_desc的值,然后只查找像魅力一样工作的data字段

prod_name | prod_short_desc

 samsung | samsung s5 

所以,现在我把两列的数据合并为一个空格作为分隔符

数据

三星samsung s5

然后用下面的查询确实search得非常快,

 select * from productsearch where productsearch match ('samsung*s5*')