SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

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番と同様ですが、カンマ区切りのみとフォーマットが異なります。下記のフォーマットは単純ですが、意味が明示的でなくなるのがデメリットです。

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

ストップワード

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

あそこ
あたり
:

ステミングの設定

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

例:サーバー→サーバ

次のページ
最後に

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Elasticsearchと対話Botによる対話型の検索システム連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9680 2016/10/11 11:59

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング