3

完全一致が最初になり、部分一致が最後になるように、高速テキスト検索を注文しようとしています。

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'

どうしたの?

4

2 に答える 2

6

Android FTS は、強化されていない標準のクエリ構文を使用します。

そのため、「NOT」または「AND」は演算子として認識されません。実際には、それらをデータベース列のテキストと一致させようとしています。そのため、Android では、実際のテキストに「not」を含むエントリのみが一致しました。

NOT には「-」、AND には空白を使用する必要があります。したがって、構文は次のようになります。

WHERE glossfts.value MATCH '犬* -犬'

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

于 2013-06-26T08:13:47.580 に答える
2

どうやら、その Android デバイスの SQLite は、別の FTS クエリ構文でコンパイルされているようです。

PRAGMA compile_options;forの出力を確認し、ENABLE_FTS3_PARENTHESISそれに応じてクエリを調整します。

于 2013-06-16T12:41:50.653 に答える