9

我正在使用 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操作员一起正常工作。

4

2 回答 2

1

SQLite 的 FTS 仅支持简单的前缀搜索。

查询 likeprod_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 运算符的优先级太高,无法用括号修改。

于 2014-09-24T16:11:20.527 回答
1

所以,我终于找到了解决方案,

我没有从所有列中单独搜索,而是在数据库中创建了一个列,其中包含要搜索的所需列的数据,

例子

我需要在prod_name&prod_short_desc列中搜索,所以我在数据库中创建了一个名为的列,并附加了&data的值,然后只查找像魅力一样的字段prod_nameprod_short_descdata

产品名称| prod_short_desc

samsung  | samsung s5

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

数据

三星三星s5

然后使用以下查询搜索确实非常快,

select * from productsearch where productsearch match ('samsung*s5*')
于 2015-01-02T14:59:37.107 回答