広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

sqlite3 全文検索の謎を追求

ご存知の方も多いと思います。sqlite3には全文検索(フルテキスト検索)が備わっています。

とは言っても、テーブルを生成する際に呪文を唱えておく必要があるので、今あるテーブルをそのまま全文検索の対象にするのはできません。
CREATE VIRTUAL TABLE tbl USING fts3(content TEXT);

元テーブルをselectして、新しいVIRTUAL FT3/FT4テーブルを作ってインサートするだけでコピーできるので、悲観することはないです。INSERTはとっても速いですしね!

フルテキストにはバージョンがあったりします


先ほどの呪文を唱える際、USING fts3と記載しています。

fts3がバージョンを意味しています。

FTS1,2は非推奨、現在使ってはいけないレベルの代物です。
FTS3とFTS4が現在使えるバージョンで、SQLiteのマニュアルではFTS4を推奨しています。

FTS3とFTS4の違いは、マニュアルによると「FTS3 and FTS4 are nearly identical.」、ほぼ一緒らしいです。
FTS4は、 SQLite version 3.7.4 から利用可能になっています。
フルテキストクエリのパフォーマンスが向上し、追加オプションにも対応しているので、FTS4を利用するようにしておいた方が安心です。
FTS4の唯一のデメリットは、追加情報によってディスク容量が増える可能性があるところです。

この辺りは、事前の評価で許容範囲かどうかの確認ポイントですね!

そして、最新はFTS5です。

SQLite 3.9.0から使えるようになっています。コンパイル時の指定はOFFになっています。
手順を踏んでコンパイルする必要があります。

ここではせっかくなので、FTS3,FTS4,FTS5の3パターンで謎を究明してみます。


全文検索の謎


sqlite3の全文検索を使い始めてみると一致する単語なのに見つからないってことがよくあります。
くせがあるというんでしょうか、よっぽどLIKE '%単語%'の方が確実です。

でも、全文検索(フルテキスト検索)は、チョー高速です。使ってみるとわかると思います。
速度に関してはストレスフリーです。

なので、全文検索のくせをつかもうと調査しました。

SQLite3の全文検索は、sqlite3.dllやsqlite3.lib(so)などをコンパイルする際に指定する”コンパイルオプション”で挙動が変わります。

ですので、ご自身の環境を知っておくことも重要です。



調査に使ったテーブル
CREATE VIRTUAL TABLE tbl USING fts3(content1,content2,content3)


後日加筆します。








posted by scripts at 17:20 | Comment(0) | TrackBack(0) | 効率化

Webからデータを取得する3つの方法



コマンドラインからHTML/XMLを取得して解析する


主にPHP系です。Windows/Mac以外にも、Linux/FreeBSD/Solarisなど様々な環境で利用可能な方法です。

  • libXML DOMDocument DOMXPath

    PHPでDOMを扱うベーシックな方法です。DOMDocumentでサイト/HTMLやXMLを読み込み、XPathで簡単に情報を取得することができます。


  • PHP Goutte

    githubで公開されているGoutteを使う方法です。
    簡単に説明すると、Goutteはコンソールで使えるWebブラウザの機能を備えています。
    必要となるコンポーネントは、guzzlehttp、react、symfonyなどです。
    requestして、ユーザ名、パスワードを入力して、ログインボタンをクリックして、ログインするなんてことも可能です。
    HTML要素に対する制御は可能です。


  • phpQuery

    githubで公開されているphpQueryを使う方法です。
    簡単に説明すると、phpQueryはコンソールで使えるWebブラウザの機能を備えています。
    基本PHP Goutteと同じような感じです。
    phpQueryは、HTML要素へアクセスする際、jQueryの表現ができることが大きな違いになります。


  • javascript PhantomJS

    phantomjs.orgで公開されているPhantomsJSを使う方法です。PhantomJSは、QtのWebKitベースのブラウザですが、CUIから利用が可能です。
    簡単な動作イメージは、PhantomJSでサイトにアクセスするとQtWebKit経由でサイトにアクセスして、QtWebKitを経由して、javascriptで制御するといった感じです。
    そのため、コンソールからアクセスしていても、スクリーンショットが撮れるというスゴ技ぶりです。
    難点は、バイナリが用意されていますが、ソースからコンパイルが必要な場合、
    GNU C++ compiler, bison, flex, gperf, Perl, Ruby, SQLite, FreeType, FontConfig, OpenSSL, ICUなどのライブラリが必要になる点です。多くの場合すでに備わっているかと思います。



これ以外にjavaを使う方法もあります。
この辺りの手法は、Web系の単体テスト、機能テストなどにも利用されます。


Webブラウザをエミュレーションする


開発環境が必要です。
実行には、WindowsやMacでログインしている必要があります。

  • Windows VisualStudio系

    System.Windows.Form.Webbrowserコントロール

    ウィンドウのFormにWebBrowserを貼り付けてアクセスする方法です。古くから存在する方法です。NavigateでURLにアクセスします。独自のJavascriptを後から実行する手段も用意されています。
    iframeなどが含まれるサイトでは、ドキュメントの読み込み完了が複数回呼び出されるため工夫が必要になります。


  • Mac XCode系

    WKWebView(webkit)

    WebKitブラウザをMacやiPhoneアプリに埋め込めることができます。ドキュメント読み込み開始時点のJavascript埋め込み、ドキュメント読み込み完了後の独自Javascriptの実行などが比較的簡単に行えます。iFrameなどが埋め込まれたサイトでもドキュメントの読み込み完了は、起点となるドキュメント読み込み完了で呼び出されます。
    target = __blank__や、BASIC認証などは、自前で対応する必要があります。



WKWebViewの日本語情報は少ないです。おそらくXcodeでドラックアンドドロップできるコントロールになっていないことが大きな要因だと思われます。
個人的な最大なメリットは、セッションを独立させられるということだと思います。
WKProcessPoolがキーワードになります。


基本:webブラウザ


Chrome/IE/SafariなどのブラウザでURLにアクセスします。
CSS、Javascript、画像イメージなどURLに紐付けられているデータを取得できます。
ブラウザ内蔵の開発ツールなどで要素の詳細を見ることが可能です。


posted by scripts at 12:14 | Comment(0) | TrackBack(0) | 効率化

gtags ソースのインデックス化で効率的に開発しよう! レンタルサーバー さくらスタンダード編

Javascript 、PHP、Ruby、Perl・・・スクリプト系の開発では、オープンソースを利用することが多々あります。

関数や変数から実際なにをやっているかをたぐる際、開発する際などにgtagsは活用できます。

tagsとは、要は、ソースコードをもとにインデックスを作成してくれるもので、このインデックスを使うと関数へのジャンプや関数を利用している場所などが分かりやすくなります。

grepなどでも探せますが、直接関数の定義へジャンプできるメリットは非常に大きいです。

ソースコードの入手先
http://www.gnu.org/software/global/

現時点最新版は、global-6.3.4でした。

gtagsインストール さくらスタンダード



$ cd ~/local/src
$ wget http://tamacom.com/global/global-6.3.4.tar.gz
$ tar xvzf global-6.3.4.tar.gz

$ cd global-6.3.4

$ ./configure --prefix=$HOME/local

$ gmake

$ gmake install

~/local/bin, ~/local/sharedなどにインストールされます。
~/local/bin/global
~/local/bin/gtags
~/local/bin/gtags-cscope
~/local/bin/htags
~/local/bin/htags-server
~/local/bin/globash
~/local/bin/gozilla
いろいろインストールされますが、主に使うのはgtags, htagsです


インデックスの作成は、ソースフォルダに移動し、
$ cd ソースフォルダ
$ gtags
とすることでGTAGS、GRTAGS、GPATHというファイルが生成されます。

(GSYMSファイルはGlobal-5.9バージョン以降GRTAGSに含まれます)


で、レンタルサーバーでどうやって使うの?


レンタルサーバー さくらスタンダードでは、vimがありません。
emacsを使います。


VPSで契約していれば、ルート権限が使えるので如何様にでもできます。
さくらスタンダードでは、基本sshログインで使うCUIベースです。

エディタはvi(not vim)、vim(自力インストール), emacs(24.3.1標準インストール)が一般的です。

vimではないviは使い勝手がかなり落ちるので、vimを自力インストールするか、emacsになります。

若干話がそれます
===================
Windows/Macなどでは、
javascript/HTML/cssをターゲットとしたエディタは豊富にあります。

javascript/HTML/css/php or ruby or perl・・といった組み合わせで開発する場合、選択肢はかなり絞られます。
また、サーバーにアップロードすることを前提で考えるとftpなどの機能が標準装備された統合環境系の選択になります。
javaベースの開発ツールを選ぶか、Visual Studioの有償プラグインを使うか、ちょっと古いWebMatrix3を使うか・・・


まさにこれ!、みんなこれをつかうべきだよ!的なベストチョイスのエディタは存在しません。
===================
windowsでもmacでもレンタルサーバーでも同じように使いたいと考えるとemacsが現実的な選択肢としてあがってきました。

慣れるまで時間がかかりますが、emacsのキーボードマクロは強力なのは相変わらずです。
el-get、caskなどのemacsの外部elを簡単に取り込む仕組みも整っています。

SublimeText系でカスタマイズごりごりやるくらいなら、emacsありだと思います


posted by scripts at 15:22 | Comment(0) | TrackBack(0) | 効率化
最新記事
最新コメント
タグクラウド
カテゴリアーカイブ
×

この広告は30日以上新しい記事の更新がないブログに表示されております。