Поведение расширенного синтаксиса запроса SQLite FTS4 (использование круглых скобок) - PullRequest
1 голос
/ 21 июня 2020

Я не могу понять поведение скобок в 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), я также получаю один и тот же набор из 12 результатов для каждых 3 вариантов запроса.

К сожалению, на данный момент мне нужно придерживаться довольно старых версий SQLite .

Любой намек на то, почему скобки, похоже, не играют своей роли в приведенных выше запросах?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...