2

Sqlite3の全文検索機能(FTS3-)を使用すると、MATCH演算子を使用して全文検索を高速化できます。

SELECT ItemId FROM docs WHERE docs.text MATCH 'linux'

ただし、MATCH(ソース:1、2 があるSQLクエリのどこでもOR演算子をサポートしていません。

SELECT ItemId FROM docs WHERE docs.text MATCH 'linux' OR column=value
error: unable to use function MATCH in the requested context

(FTS3クエリ自体のOR演算子と混同しないでください。つまり、SELECT ItemId FROM docs WHERE docs.text MATCH 'linux OR unix'これは正常に機能します。)

動作するようにクエリを書き直す方法はありますか(多少遅くても)?

4

1 に答える 1

2

一時ビューを使用してクエリを書き換えると、期待どおりに機能します。

CREATE TEMP VIEW view1 AS SELECT ItemId FROM docs WHERE docs.text MATCH 'linux' 
SELECT * FROM docs WHERE ItemId IN view1 OR column=value
DROP VIEW view1

一時ビューが「スイープ」されていない場合、つまり多くの行が生成されない場合、速度は「直接」クエリ(一時ビューなし)の速度に匹敵します。

于 2012-08-01T17:21:05.750 に答える