使用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运算符也可以正常工作。

  • 如何在sqlite中删除数据库?
  • Android性能:平面文件与SQLite
  • 我的sqlite数据库存储在android中?
  • Android将图像保存到SQLite或SDCard或内存
  • 如何避免SQLiteException锁定错误
  • 如何使用osmdroid通过将地图图块图像保存到sqlite数据库来实现离线地图?
  • SQLite连接对象泄露 - Android
  • 通过cmd中的adb shell获取SQLite数据库
  • 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*')