検索に悩む

閲覧数: 235(0)

インターネットを使って情報を入手する時、得られた情報の品質は、検索サイトの精度というよりは、検索に使ったキーワードに依存するんじゃないかといつも思ってる。検索精度の比較サイトや、まとめサイトがあったり、いろいろ巷には情報が溢れているが、結局は、検索する側の「品質」が一番結果に反映しているんだろうと個人的には思うわけです。

ブログに限らず、個人サイトでも「検索」機能を実装しているサイトがある。手作りというよりは、ブログに標準の検索ツールをそのままってことなんだと思うけど、例えば、日本語による記事の検索なんかは結構ハードル高いんじゃないかと考えている。このブログは非公開で、外のインデックスサーバーからのインデックス要求に拒否を返している。検索は自前で実装するしかないのだけれど、Wordpress標準の検索は、データベースに負荷がかかるやり方なので、今時は流行らない。検索は、サーバーに同居しているTsubopediaの方が重要で、mediawikiにはElasticsearchという、流行りの検索エンジンを使っているので、arigato.esもWordpressにElasticsearchを使うことにする。

と、決めたところまでは良かったが、どのプラグインも、どうも日本語の精度がいまいち。一長一短あって、決めきれない。希望としては、例えば、「お弁当」で検索したら、「弁当」も拾って欲しいけど、「お」単独では拾って欲しくない。分かち書きの精度を日本語レベルで保つ方法がなかなか見つからない。Elasticsearch単体では、端的に言えば、一語レベルでの分割となる。「東京スカイツリー」が「東」「京」「ス」「カ」「イ」「ツ」「リ」「ー」となるわけだ、せめて「東京」「スカイ」「ツリー」「スカイツリー」ぐらいに分割して欲しい。そこで登場するのが、「黒文字」和菓子で出てくる、あの黒文字楊枝である。

茶席で和菓子を取り分ける、の意から、Elasticsearchの日本語形態素解析プラグインはKuromojiと命名されている。このKuromojiプラグインを導入し、Wordpress側はFantastic Elasticsearchというファンタスティックな名前のプラグインに検索を託す。ただし、このファンタスティックなプラグインは外国育ちで日本語を知らなかった、分かち書きをEnglishでやってしまう。

お弁当の例で言えば、「お弁当」で「弁当」も拾ってくるのはいいけど、「お」「弁」「当」でもいっぱい拾ってくるので、検索結果が汚くなる。上位の結果は期待値通りなんだけど。

そこでインターネットの検索にお世話になるわけだが、出るわ出るわ、「オレ様メソッド」、どれをとっても偏った方法だったり、特殊な環境でしか実現できなかったり。やたら複雑な方法を披露して、オレ様気取りだったりw

これじゃ玉石混交というより、石ばっかりじゃないか。どうせ石なら自分の石にしちゃいましょうってことで、難しいことや、複雑なことは排除して、プラグインが指定するAnalyzerを単純にEnglishからKuromojiに変更しちゃいました。この方法は、プラグインが更新されると、元に戻る欠点があるけど、その他の点では、巷にあふれるオレ様メソッドより簡易で確実でしたw

修正を入れるファイルは、以下の通り。

../wp-content/plugins/fantastic-elasticsearch/src/elasticsearch/Indexer.php

修正内容は、バージョンによって多少異なり、4.0の場合は、この例を参照。

if($props['type'] == 'string' && $props['index'] == 'analyzed'){
    $lang = Config::apply_filters('string_language', 'english');
    $props = array(
        'type' => 'multi_field',
        'fields' => array(
         $field => $props,
         $lang => array_merge($props,array(
        'analyzer' => 'kuromoji' /* $lang から'kuromoji'へ変更 */
                )
            )
        )
    );
}

4.0より古い場合は、以下の例を参照のこと。

if($props['type'] == 'string' && $props['index'] == 'analyzed'){
    $props = array(
        'type' => 'multi_field',
        'fields' => array(
         $field => $props,
        'english' => array_merge($props,array(
        'analyzer' => 'kuromoji' /* 'english'から'kuromoji'へ変更 */
                )
            )
        )
    );
}

検索にどんな単語を入れると、どんな結果が返ってくるか、とても勉強になります。黒文字楊枝は、文字通り、黒文字の木を削って作るのだとか、タイトル画像が黒文字の木です。

これも立派なオレ様メソッドだなw

最終更新日: 2016年5月13日

カテゴリー公開, 閑話(IT)タグ,
小ネタひとつまみ

なんかねパソコンでこのサイトを見ると横幅があり過ぎて読みにくいって指摘がありまして、そもそもWind  続きを読む

SWIPER実装編
blank

Swiperの実装編、このサイトで実際に使っているJavaScriptの紹介です。 [code la  続きを読む

ElasticPress 3.0
blank

ここのところElasitcsearch関連の話が多いなと思っていたら「ElasticPress」がバ  続きを読む

SWIPERでSLIDER
blank

無料テーマを独自に改善する活動の一環として、前回は「おすすめ記事」を表示する部分について書きました。  続きを読む

久しぶりのITネタ
blank

最近はずっと旅日記風なネタに始終しておりましたが、ここに来て久しぶりにITネタ行ってみたいと思います  続きを読む

おすすめ記事
blank

テーマのカスタマイズで「Featured Content」というオプションがあります。日本語では「お  続きを読む

スポンサーリンク

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください