検索に悩む

閲覧数: 229(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日】
カテゴリー公開タグ,
検索精度を高める
2020年11月1日

検索ネタを連発するのはElasticsearchやElasticPressがバージョンアップした時の  続きを読む

ElasticPress日本語設定2020年版
blank
2020年10月29日

ElasticsearchをWordpressで利用するためのプラグインであるElasticPres  続きを読む

ElasticPress 3.5
blank
2020年10月22日

Elasticsearch用のプラグインであるElasticPressがメジャーバージョンアップ(3  続きを読む

Elasticsearch 6.8.11
blank
2020年10月2日

2017年末に「2.4.6」から「5.6.5」へバージョンアップして以来の大幅バージョンアップです。  続きを読む

パンくずリスト詳細
blank
2020年5月12日

テーマの「マイナーチェンジ」に伴って「パンくずリスト」の仕様を若干変更しました。一つ前のテーマではパ  続きを読む

カテゴリーを制限する
blank
2020年5月11日

過去に何度も書いた「カテゴリー制限」の話、元はと言えば初期に書かれた「非公開」の記事が原因です。トッ  続きを読む

コメントを残す

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