大きなテーブルで部分文字列検索を実行する必要がある Android アプリケーションを開発しています (通りと場所の名前を含む約 500,000 エントリ、エントリごとに数単語)。
CREATE TABLE Elements (elementID INTEGER, type INTEGER, name TEXT, data BLOB)
「名前」列に文字列が含まれているエントリは、全エントリの 20% のみであることに注意してください。
次のクエリの実行には、約 2 分かかります。
SELECT elementID, name FROM Elements WHERE name LIKE %foo%
クエリを高速化するために、FTS3 を使用しようとしました。これは大成功で、クエリ時間は 1 分に短縮されました (驚いたことに、データベース ファイルのサイズはわずか 5% しか増加しませんでした。これも私の目的には十分です)。
問題は、FTS3 が部分文字列検索をサポートしていないように見えることです。つまり、"foo bar" と "foobar" で "bar" を検索したい場合、両方の結果が必要なのに、"foo bar" しか取得できません。
だから実際には2つの質問があります:
クエリをさらに高速化することは可能ですか? 私の目標はクエリの 30 秒ですが、それが現実的かどうかはわかりません...
FTS3 を使用して実際の部分文字列検索を取得するにはどうすればよいですか?