CodeZine(コードジン)

特集ページ一覧

Elasticsearchを用いた日本語検索システムの理論と設定

Elasticsearchと対話Botによる対話型の検索システム 第1回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2016/10/06 14:00
目次

Elasticsearchを用いた日本語検索システムの構成図

図2 Elasticsearchを用いた日本語検索システムの構成図
図2 Elasticsearchを用いた日本語検索システムの構成図

 今回構成する日本語検索システムの構成図を図2に示します。Dockerのコンテナ内にElasticsearchがあり、Elasticsearchに各種設定を行い、文書の登録から検索を行います。

Elasticsearchの設定

 下記がElasticsearchを設定するためのymlファイルです。必要なところのみ抜粋しています。全体については、記事添付のサンプルファイルを参照してください。

リスト1 ElasticsearchCode/elasticsearch.yml
#Elasticsearchにアクセス可能にするためのIPアドレスの設定
network.host: 0.0.0.0

 上記の部分でElasticsearchにアクセス可能なIPアドレスの設定をしています。今回はローカル環境で動作させるため、「0.0.0.0」とすべてのIPアドレスからアクセス可能にしています。

リスト2 ElasticsearchCode/elasticsearch.yml
# ---------------------------------- Index -----------------------------------
# Elasticsearchに登録する文書のための設定
index:
    # 登録された文書を分析するためのモジュール
    analysis:

 Elasticsearchの設定についてですが、まず文書登録「index」の部分でElasticsearchに登録する文書のための設定をすることを表しています。

 具体的な設定は、インデントされた部分で行われていきます。「analysis」の部分で文書の解析設定をすることを表しています。

図3: Elasticsearchのindex設定
図3: Elasticsearchのindex設定

 Elasticsearchの「analysis」の設定は図3のイメージで行います。まず「filter」で余分な単語を削り「tokenizer」で単語を分割して、「analyzer」で登録、検索するための設定を行っています。

リスト3 ElasticsearchCode/elasticsearch.yml
# 検索に有用な単語のみ残すためのフィルター 
filter:
    # 同義語の辞書設定
    synonym:
        type: synonym
        synonyms_path: /usr/share/elasticsearch/dict/synonym.txt
    # ストップワードの設定
    stopword:
        type: stop
        stopwords_path: /usr/share/elasticsearch/dict/stopword.txt
    # ステミングの設定(同じような単語を同一とみなしたい時に使用:
    katakana_stemmer:
        type: kuromoji_neologd_stemmer
    # 検索から外すための品詞の設定
    pos_filter:
        type: kuromoji_neologd_part_of_speech
        stoptags: [
            "助詞-格助詞-一般",
            "助詞-終助詞"
        ]

 検索に必要な単語のみを残すフィルターの設定です。

  • 同義語辞書設定
  • ストップワード設定
  • ステミングの設定
  • 検索または登録から外すための品詞設定

 上記4つの設定をして検索に効果のない単語を外しています。上から順に説明していきます。

同義語辞書

 意味は同じですが、記述が違う場合に同一の意味として検索して欲しい単語を設定します。

例:本、書物 →本

 同義語の設定は3種類の方法で登録できます。

1:多数の単語を1つの単語に集約して検索を行います。
例:ipodに集約
i-pod, i pod => ipod
2:多数の単語をそのまま多数の単語として扱い、1つの単語で検索したら他の単語でも検索を行います。
例:「ipod」で検索したら「ipod」、「i-pod」、「i pod」でも検索を行います。
ipod, i-pod, i pod => ipod, i-pod, i pod
3:1つの単語に複数の単語を割り当て、その単語が検索された場合に他の単語でも検索します。
例:「foo」で検索したら「foo」、「bar」で検索
foo => foo bar

 今回は著者が使用した一例を載せます。上記の2番と同様ですが、カンマ区切りのみとフォーマットが異なります。下記のフォーマットは単純ですが、意味が明示的でなくなるのがデメリットです。

同意,承認,許可,賛成
:

ストップワード

 検索には寄与しない「が」「を」「に」「の」「と」などの助詞を除くために設定します。下記のように単語を追加していくのみの単純なフォーマットです。

あそこ
あたり
:

ステミングの設定

 カタカナの最後の部分の長音除去の際に使用します。

例:サーバー→サーバ

  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2016/10/11 11:57 サンプルファイルを差し替えました。

  • 2016/10/09 18:16 Page 1 検証環境を追記

  • 2016/10/09 18:16 ElasticsearchCode/elasticsearch.ymlの「min_gram」と「max_gram」を同一の値である2に修正

  • 2016/10/09 18:15 Page 3 「2gramの例」 例を「これは例文です。→ これ は例 文で す。」から「これは例文です。→ これ れは は例 例文 文で です す。」に修正

  • 2016/10/09 18:15 Page 3 「mecab」を「kuromoji」に修正

  • 2016/10/09 18:15 Page 3 「mecab neologd」を「kuromoji neologd」に修正

  • 2016/10/09 18:15 Page 2 ステミングの設定 kuromoji_neologd_stemmerの例をカタカナの長音をステミングするための設定に修正

バックナンバー

連載:Elasticsearchと対話Botによる対話型の検索システム

著者プロフィール

  • WINGSプロジェクト 大串 正矢(オオグシ マサヤ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5