当前位置 : 主页 > 手机开发 > android >

Android Sqlite FTS NOT操作

来源:互联网 收集:自由互联 发布时间:2021-06-11
我正在尝试订购快速文本搜索,以便完全匹配是第一个,部分匹配是最后一个. 我创建了一个在SQLiteStudio中工作的查询: SELECT value, 1 AS _order FROM glossftsWHERE glossfts.value MATCH 'dog'UNIONSELECT va
我正在尝试订购快速文本搜索,以便完全匹配是第一个,部分匹配是最后一个.

我创建了一个在SQLiteStudio中工作的查询:

SELECT value, 1 AS _order FROM glossfts
WHERE glossfts.value MATCH 'dog'
UNION
SELECT value, 2 AS _order FROM glossfts
WHERE glossfts.value MATCH 'dog* NOT dog'
ORDER BY _order

结果就是这样

Beware of dog                                     1
Disliked by everybody, not even a dog will eat    1
Bad dog                                           1
Creed, dogma                                      2
Dogs                                              2
Dogwood                                           2

这很好用但是当我在android中使用相同的查询时我才会得到

Beware of dog                                     1
Disliked by everybody, not even a dog will eat    1
Bad dog                                           1
Disliked by everybody, not even a dog will eat    2

因为它似乎在解释:

MATCH 'dog* NOT dog'

MATCH 'dog* not dog'

这是怎么回事?

Android FTS使用标准查询语法,未增强.

因此,它不会将“NOT”或“AND”识别为运算符.它实际上是尝试将它们与db列的文本相匹配.这就是为什么在Android上,你唯一的匹配来自实际文本中带有“not”的条目.

您必须使用“ – ”表示NOT,使用空格表示AND.
因此,您的语法应如下所示:

在哪里,有光泽的,有价值的,狗的,狗的,狗的

http://www.sqlite.org/fts3.html

网友评论