You are currently viewing OpenSearchでなにか作るぞ!(dAnimeリメイク その4 日本語検索の向上を目指して)

OpenSearchでなにか作るぞ!(dAnimeリメイク その4 日本語検索の向上を目指して)

前回まででざっくりとGoからOpenSearchに検索を行って、結果を取得するところまで実施してみました。

しかし、取得された結果はあまり納得行くものではなかったため、改めて日本語検索の精度が現時点で向上できないか試してみます。
「ストライク」で検索して「ストライクウィッチーズ」が出てこないのは個人的にかなりまずい・・・

kuromojiに変わる日本語形態素解析ライブラリ「sudachi」

sudachiについてはこちらの記事で少し触れられていました。
https://techblog.zozo.com/entry/elasticsearch-mapping-config-for-japanese-search#kuromoji%E4%BB%A5%E5%A4%96%E3%81%AE%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90Sudachi

せっかくの趣味開発なので、あんまり前例が無いものも使っていきたいと思うので、sudachiを利用したときの結果を見てみようと思います。

GitHubにOpenSearch2.8.0用のプラグインも用意されているため、こちらを利用するようにします。
また、プラグイン本体以外にも辞書ファイルが必須のようで、そちらもインストールします。
辞書ファイルは事前にダウンロードして展開しておき、Dockerfileと同じ場所に保存しました。3種類ありますが、全て必要なようです。
辞書ファイルのダウンロードは以下のURLから行えます。
https://github.com/WorksApplications/SudachiDict

参考に、sudachiをインストールしたときのDockerfileは以下の通りです。

FROM opensearchproject/opensearch:2.8.0
RUN /usr/share/opensearch/bin/opensearch-plugin install analysis-kuromoji
RUN /usr/share/opensearch/bin/opensearch-plugin install analysis-icu
RUN /usr/share/opensearch/bin/opensearch-plugin install https://github.com/WorksApplications/elasticsearch-sudachi/releases/download/v3.1.0/opensearch-2.8.0-analysis-sudachi-3.1.0.zip
COPY system_core.dic /usr/share/opensearch/config/sudachi/
COPY system_small.dic /usr/share/opensearch/config/sudachi/
COPY system_full.dic /usr/share/opensearch/config/sudachi/

マッピングファイルの修正

利用するアナライザが変わるため、マッピングファイルも修正します。
サンプルの設定をもとに、最低限の修正を加えてみます。
https://github.com/WorksApplications/elasticsearch-sudachi

PUT d_anime
{
  "settings": {
    "analysis": {
      "analyzer": {
        "sudachi_analyzer": {
          "filter": [],
          "tokenizer": "sudachi_tokenizer",
          "type": "custom"
        }
      },
      "tokenizer": {
        "sudachi_tokenizer": {
          "type": "sudachi_tokenizer",
          "split_mode": "C",
          "discard_punctuation": true,
          "resources_path": "/usr/share/opensearch/config/sudachi/"
        }
      }
    }
  },
  "mappings": {
      "properties": {
        "work_id": {
        "type": "integer"
        },
        "work_title": {
          "type": "text",
          "analyzer": "sudachi_analyzer",
          "index": true
        },
        "link": {
        "type": "keyword"
        },
        "main_key_visual_path": {
        "type": "keyword"
        },
        "main_key_visual_alt": {
        "type": "keyword"
        },
        "my_list_count": {
        "type": "integer"
        },
        "favorite_count": {
        "type": "integer"
        },
        "age_limit_type": {
        "type": "integer"
        },
        "end_of_delivery": {
        "type": "integer"
        },
        "created_at": {
        "type": "date"
        },
        "updated_at": {
        "type": "date"
        }
      }
    }
  }
}

バルクインサートでデータ再作成

上記で設定したインデックスに対して、再度アニメのデータを取り込んでみます。

改めて「ストライク」でアナライズをかけてみる

いきなりですが実行した結果がこちら。
ちゃんと「ストライク」「ウィッチーズ」で分割されています。

前回作成したサーバーサイド(Go)からも実行してみます。

ストライクウィッチーズも検索結果に載ってきました!良かった!!

ストライクウィッチーズでもきちんとヒットします。
何もチューニングを行っていない状態で検索結果が改善されたので、導入の意義はあったかなと思います。
もうしばらく、現在の設定で検索結果が変な状態になっていないか確認したいと思います。

コメントを残す