1

我无法真正理解 FTS4 括号的行为,并希望得到一些解释。

以下是查询的 3 个变体,据我了解,它们都应该提供相似的结果,而哪些不是:

sqlite> .version
SQLite 3.28.0 2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50 
zlib version 1.2.11 
gcc-7.4.0
sqlite> -- Query 1 (1 result) 
sqlite> SELECT id_ph FROM jmcfts4 WHERE jmcfts4 MATCH '( cancan* ) OR ( can can )' ;
97
sqlite> -- Query 2 (2 results) 
sqlite> SELECT id_ph FROM jmcfts4 WHERE jmcfts4 MATCH 'cancan* OR ( can can )' ;
97
265
sqlite> -- Query 3 (12 results) 
sqlite> SELECT id_ph FROM jmcfts4 WHERE jmcfts4 MATCH 'cancan* OR "can can"' ;
9
96
97
100
101
143
144
145
152
161
265
266

有趣的是,使用 SQLite 版本 3.32.2(嵌入在 DB Browser 3.12 中),这 3 个变体实际上输出了相同的 12 个结果集(预期结果,顺便说一句)。

使用 FTS5(无论 SQLite 的版本),对于查询的每 3 个变体,我也确实得到了相同的 12 个结果集。

不幸的是,目前我需要坚持使用相当旧的 SQLite 版本。

关于为什么括号似乎在上述查询中没有发挥作用的任何提示?

谢谢

4

0 回答 0