やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3のLIKE句でMarkdownテキストから検索してみる

前回のつづき。FTSの実装が難しそうなので最悪はLIKE句に逃げたい。どのくらい使えるのか試してみる。

準備

http://ytyaru.hatenablog.com/entry/2017/06/30
http://ytyaru.hatenablog.com/entry/2017/07/01
http://ytyaru.hatenablog.com/entry/2017/07/02
http://ytyaru.hatenablog.com/entry/2017/07/04
http://ytyaru.hatenablog.com/entry/2017/07/05

全エントリをAPIで取得しDBに挿入する

データ

テストで使用したDBのファイルサイズは5.8MB。レコード数は382件。

Markdownで編集したデータが入っている。HTML変換後テキストなども含まれている。

実行

$ sqlite3 meta_Hatena.Blog.Entries.ytyaru.hatenablog.com.sqlite3

以下のクエリなら一瞬で終わった。

sqlite> select Title,Updated from Entries where Content like '%GTKmm%';
zlibをインストールする|2017-05-16T00:00:00+09:00
libxml2-devel、libxslt-develというパッケージが見つからない|2017-05-15T00:00:00+09:00
Linuxインストール済みパッケージ一覧|2017-05-14T00:00:00+09:00
CSSにてSVG拡大アニメーションしてみた|2017-04-15T00:00:00+09:00
GPartedでパーティションを見える化|2016-12-23T10:00:00+09:00
スクリプト言語を乗り換えるべきか|2016-11-20T10:00:00+09:00
Makefileでdebugとreleaseを切り替える|2016-11-05T10:00:00+09:00
サブディレクトリに配置してコンパイルするMakefileを書いた|2016-11-04T10:00:00+09:00
Makefileで暗黙ルールと変数をもちいて記述を簡略化した|2016-11-03T10:00:00+09:00
Makefileで複数のソースコードをコンパイルする|2016-11-02T00:00:00+09:00
MinGWとGTKの環境変数を変更した|2016-11-01T10:00:00+09:00
g++のコンパイル時間とファイルサイズ|2016-10-31T10:00:00+09:00
g++で実行時のライブラリ参照パスが設定できなかった|2016-10-30T10:00:00+09:00
Makefileで単一のソースコードをコンパイルする|2016-10-29T10:00:00+09:00
MinGWでHelloWorld(ライブラリ編)|2016-10-28T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)|2016-10-17T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)に成功した|2016-10-10T10:00:00+09:00
GTKmm3を再コンパイルする|2016-10-09T10:00:00+09:00
現状のMinGW環境をまとめてみる|2016-10-08T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)に失敗した原因をさぐる|2016-10-06T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)に失敗した2|2016-10-05T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)に失敗した|2016-10-04T10:00:00+09:00
MinGWでHelloWorld(GTK+3)|2016-10-03T10:00:00+09:00
GTK+3ライブラリの参照設定ができなかったログ|2016-10-02T10:00:00+09:00
MinGWでGTK+3のHelloWorldコードをコンパイルできた|2016-10-01T10:00:00+09:00
MinGWでHelloWorld(C++WindowApplication版)|2016-09-29T10:00:00+09:00
マトリクス表を考えてみた|2016-09-27T10:00:00+09:00
MinGWでHelloWorld(C++ConsoleApplication版)|2016-09-26T10:00:00+09:00
MinGWでHelloWorld(WindowsApplication版)|2016-09-25T10:00:00+09:00
MinGWでHelloWorld(ConsoleApplication版)|2016-09-24T10:00:00+09:00
MinGWでGTK+3のHelloWorldコードをコンパイルするも失敗|2016-09-23T10:00:00+09:00
gtkmm3のコンパイルができたっぽい|2016-09-22T07:43:41+09:00
Gtkmm3をコンパイルするも失敗|2016-09-21T10:00:00+09:00
chocolateyでMSYSを入手しようとするも失敗|2016-09-20T10:00:00+09:00
chocolateyでMinGWを入手する|2016-09-19T10:00:00+09:00
chocolateyのインストール|2016-09-18T10:00:00+09:00
MinGW環境をつくれなかった|2016-09-17T10:00:00+09:00
Gtkmm3環境をWindowsXPでつくれないか調査してみた|2016-09-16T19:12:59+09:00
GTKmmでUTF8ファイル書込する(Gio::DataOutputStream)|2016-09-15T09:20:40+09:00
GTKmmでUTF8ファイル書込する(FILE構造体)|2016-09-14T18:39:07+09:00
GTKmmでfstreamを使うと実行時エラーになってしまう|2016-09-13T09:25:35+09:00
GtkmmのEntryでテキスト入力する|2016-09-12T23:31:43+09:00
Pixbufでスプライトアニメーション|2016-09-09T22:52:13+09:00
Glibのsignal_timeout関数で文字列アニメーション|2016-09-08T08:40:03+09:00
FontOptionsでアンチエイリアス|2016-09-07T10:26:50+09:00
Pixbufで画像ファイルを表示する|2016-09-06T08:19:58+09:00
GTK+で使えるフォント名を一覧してみた|2016-09-04T12:59:48+09:00
pangommを使ってみた|2016-09-03T13:56:08+09:00
cairommを使ってみた|2016-09-03T07:47:24+09:00
GTKmmを使ってみた|2016-09-02T14:43:06+09:00
Gtk+でマウスイベントを取得してみた|2016-08-31T13:13:07+09:00
gladeでGTK+を使ってみた|2016-08-27T19:44:36+09:00
C++描画ライブラリcairoを使おうと思ったが失敗したログ|2016-08-26T08:44:33+09:00

しかし、order by句を付与すると遅くなった。2,3秒かかったか。

sqlite> select Title,Updated from Entries where Content like '%GTKmm%' order by updated asc;
C++描画ライブラリcairoを使おうと思ったが失敗したログ|2016-08-26T08:44:33+09:00
gladeでGTK+を使ってみた|2016-08-27T19:44:36+09:00
Gtk+でマウスイベントを取得してみた|2016-08-31T13:13:07+09:00
GTKmmを使ってみた|2016-09-02T14:43:06+09:00
cairommを使ってみた|2016-09-03T07:47:24+09:00
pangommを使ってみた|2016-09-03T13:56:08+09:00
GTK+で使えるフォント名を一覧してみた|2016-09-04T12:59:48+09:00
Pixbufで画像ファイルを表示する|2016-09-06T08:19:58+09:00
FontOptionsでアンチエイリアス|2016-09-07T10:26:50+09:00
Glibのsignal_timeout関数で文字列アニメーション|2016-09-08T08:40:03+09:00
Pixbufでスプライトアニメーション|2016-09-09T22:52:13+09:00
GtkmmのEntryでテキスト入力する|2016-09-12T23:31:43+09:00
GTKmmでfstreamを使うと実行時エラーになってしまう|2016-09-13T09:25:35+09:00
GTKmmでUTF8ファイル書込する(FILE構造体)|2016-09-14T18:39:07+09:00
GTKmmでUTF8ファイル書込する(Gio::DataOutputStream)|2016-09-15T09:20:40+09:00
Gtkmm3環境をWindowsXPでつくれないか調査してみた|2016-09-16T19:12:59+09:00
MinGW環境をつくれなかった|2016-09-17T10:00:00+09:00
chocolateyのインストール|2016-09-18T10:00:00+09:00
chocolateyでMinGWを入手する|2016-09-19T10:00:00+09:00
chocolateyでMSYSを入手しようとするも失敗|2016-09-20T10:00:00+09:00
Gtkmm3をコンパイルするも失敗|2016-09-21T10:00:00+09:00
gtkmm3のコンパイルができたっぽい|2016-09-22T07:43:41+09:00
MinGWでGTK+3のHelloWorldコードをコンパイルするも失敗|2016-09-23T10:00:00+09:00
MinGWでHelloWorld(ConsoleApplication版)|2016-09-24T10:00:00+09:00
MinGWでHelloWorld(WindowsApplication版)|2016-09-25T10:00:00+09:00
MinGWでHelloWorld(C++ConsoleApplication版)|2016-09-26T10:00:00+09:00
マトリクス表を考えてみた|2016-09-27T10:00:00+09:00
MinGWでHelloWorld(C++WindowApplication版)|2016-09-29T10:00:00+09:00
MinGWでGTK+3のHelloWorldコードをコンパイルできた|2016-10-01T10:00:00+09:00
GTK+3ライブラリの参照設定ができなかったログ|2016-10-02T10:00:00+09:00
MinGWでHelloWorld(GTK+3)|2016-10-03T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)に失敗した|2016-10-04T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)に失敗した2|2016-10-05T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)に失敗した原因をさぐる|2016-10-06T10:00:00+09:00
現状のMinGW環境をまとめてみる|2016-10-08T10:00:00+09:00
GTKmm3を再コンパイルする|2016-10-09T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)に成功した|2016-10-10T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)|2016-10-17T10:00:00+09:00
MinGWでHelloWorld(ライブラリ編)|2016-10-28T10:00:00+09:00
Makefileで単一のソースコードをコンパイルする|2016-10-29T10:00:00+09:00
g++で実行時のライブラリ参照パスが設定できなかった|2016-10-30T10:00:00+09:00
g++のコンパイル時間とファイルサイズ|2016-10-31T10:00:00+09:00
MinGWとGTKの環境変数を変更した|2016-11-01T10:00:00+09:00
Makefileで複数のソースコードをコンパイルする|2016-11-02T00:00:00+09:00
Makefileで暗黙ルールと変数をもちいて記述を簡略化した|2016-11-03T10:00:00+09:00
サブディレクトリに配置してコンパイルするMakefileを書いた|2016-11-04T10:00:00+09:00
Makefileでdebugとreleaseを切り替える|2016-11-05T10:00:00+09:00
スクリプト言語を乗り換えるべきか|2016-11-20T10:00:00+09:00
GPartedでパーティションを見える化|2016-12-23T10:00:00+09:00
CSSにてSVG拡大アニメーションしてみた|2017-04-15T00:00:00+09:00
Linuxインストール済みパッケージ一覧|2017-05-14T00:00:00+09:00
libxml2-devel、libxslt-develというパッケージが見つからない|2017-05-15T00:00:00+09:00
zlibをインストールする|2017-05-16T00:00:00+09:00

対象をTitle列にし、降順にしたら一瞬ででた。Content列はテキスト量も多いし、ヒットする件数が多いと遅くなるのだろう。

sqlite> select Title,Updated from Entries where Title like '%GTKmm%' order by updated desc;
MinGWでHelloWorld(Gtkmm3版)|2016-10-17T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)に成功した|2016-10-10T10:00:00+09:00
GTKmm3を再コンパイルする|2016-10-09T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)に失敗した原因をさぐる|2016-10-06T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)に失敗した2|2016-10-05T10:00:00+09:00
MinGWでHelloWorld(Gtkmm3版)に失敗した|2016-10-04T10:00:00+09:00
gtkmm3のコンパイルができたっぽい|2016-09-22T07:43:41+09:00
Gtkmm3をコンパイルするも失敗|2016-09-21T10:00:00+09:00
Gtkmm3環境をWindowsXPでつくれないか調査してみた|2016-09-16T19:12:59+09:00
GTKmmでUTF8ファイル書込する(Gio::DataOutputStream)|2016-09-15T09:20:40+09:00
GTKmmでUTF8ファイル書込する(FILE構造体)|2016-09-14T18:39:07+09:00
GTKmmでfstreamを使うと実行時エラーになってしまう|2016-09-13T09:25:35+09:00
GtkmmのEntryでテキスト入力する|2016-09-12T23:31:43+09:00
GTKmmを使ってみた|2016-09-02T14:43:06+09:00

気になること

よく記事には「成果物」「開発環境」のような項を書いている。これが文字列検索に引っかかるのが好ましくない場合もある。

「開発環境」項以外のところで"Linux"という文字列を書いている記事を探したいときに困る。開発環境に"Linux"と書いてある記事がたくさんあると全部ヒットしてしまう。

たしかに開発環境がLinuxである記事を探したい時もある。でも、それはそれで別に検索できるほうが好ましい。つまり全文検索でなく開発環境というメタデータの値に"Linux"と記されたレコードだけを検索できるようにしたい。

欲を言えば、"Linux"という文字列との一致だけでなく"Ubuntu",“Debian"などLinuxディストリビューション名も一致すると判断して検索することも可能になるとなお嬉しい。順位は下。もちろん"Linux"という文字列に一致するものだけに絞り込めることも必要。

また、そのメタデータからMarkdown,HTMLなどの形式として出力する機能も欲しい。メタデータを入れるだけで定形部分の作成ができる。

所感

思ったよりLIKE句が使えそう。しばらくは文字列の部分一致だけならLIKE句でいいかもしれない。これでFTSの調査は気楽にできる。難しそうならLIKE句でいいや。