Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用全文搜索(FTS)在多列中搜索,并使用OR运算符使用多个标记_Android_Sqlite_Full Text Search_Fts4 - Fatal编程技术网

Android 使用全文搜索(FTS)在多列中搜索,并使用OR运算符使用多个标记

Android 使用全文搜索(FTS)在多列中搜索,并使用OR运算符使用多个标记,android,sqlite,full-text-search,fts4,Android,Sqlite,Full Text Search,Fts4,我正在使用FTS查询我的数据库,以提高搜索速度,因为我还需要在文本描述中搜索 当我尝试使用单列进行查询时,其工作原理如下所示 select * from productsearch where productsearch match ('prod_name:panasonic*tw*') 而且 select * from productsearch where productsearch match ('prod_short_desc:samsung*s5*') 所以,上面两个查询都给出了预

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

当我尝试使用单列进行查询时,其工作原理如下所示

select * from productsearch where productsearch match ('prod_name:panasonic*tw*')
而且

select * from productsearch where productsearch match ('prod_short_desc:samsung*s5*')
所以,上面两个查询都给出了预期的结果,但当我尝试使用
运算符组合这两个查询时,它不会给出任何结果

select * from productsearch where productsearch match ('prod_name:panasonic*tw* OR
                                                         prod_short_desc:samsung*s5*')
因此,我想知道在使用
运算符搜索多个列时,我在这里是否做错了什么

更新

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

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

您可以看到,如果我删除了多个标记,那么使用
操作符也可以正常工作。

SQLite的FTS只支持简单的前缀搜索

类似于
prod\u short\u desc:samsung*s5*
的查询由两个表达式组成,
prod\u short\u desc:samsung*
s5*
,其行为与您编写的
prod\u short\u desc:samsung*s5*
完全相同

如果您已经为增强查询语法编译了SQLite,则可以使用如下查询:

prod_short_desc:samsung* prod_short_desc:s5* OR prod_name:panasonic* prod_name:tw*

如果您已经为标准查询语法编译了SQLite,则不能使用单个查询,因为OR运算符的优先级太高,不能用括号修改。

因此,我最终找到了解决方案

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

范例

我需要在
prod_name
&
prod_short_desc
列中搜索,所以我在数据库中创建了一个名为
data
的列,并附加了
prod_name
prod_short_desc
的值,然后只查找
数据
字段,效果非常好

产品名称产品名称

samsung  | samsung s5
因此,现在我将两列的数据合并为一个,并使用空格作为分隔符

数据

三星s5

然后在下面的查询中,搜索速度确实非常快

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

我对金融时报一无所知,但是。。。你可以试试:
match(
prod\u name:panasonic*tw*”或“prod\u short\u desc:samsung*s5*”)
(在同一个匹配子句中分隔字符串)或
match(
prod\u name:panasonic*tw*)或match(
(分隔匹配子句)?@FrankN.Stein尝试了这两种方法,不起作用第一个给出所有结果意味着它完成了跳过条件第二个给函数match()提供了错误的参数好吧,只是一个尝试。。。我认为它会像一个普通的子句一样工作(比如当你想检查一个月是偶数,一天是奇数时)。同样的问题,没有结果!