Android Sqlite FTS NOT操作

时间:2013-06-16 11:00:30

标签: android sqlite fts4

我正在尝试订购快速文本搜索,以便首先完全匹配,最后部分匹配。

我创建了一个在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'

怎么回事?

2 个答案:

答案 0 :(得分:5)

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

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

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

WHERE glossfts.value MATCH'dog * -dog'

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

答案 1 :(得分:2)

显然,该Android设备上的SQLite已使用a different FTS query syntax进行编译。

检查PRAGMA compile_options;的{​​{1}}输出,并相应地调整您的查询。