Elasticsearchを用いた日本語検索システムの構成図
今回構成する日本語検索システムの構成図を図2に示します。Dockerのコンテナ内にElasticsearchがあり、Elasticsearchに各種設定を行い、文書の登録から検索を行います。
Elasticsearchの設定
下記がElasticsearchを設定するためのymlファイルです。必要なところのみ抜粋しています。全体については、記事添付のサンプルファイルを参照してください。
#Elasticsearchにアクセス可能にするためのIPアドレスの設定 network.host: 0.0.0.0
上記の部分でElasticsearchにアクセス可能なIPアドレスの設定をしています。今回はローカル環境で動作させるため、「0.0.0.0」とすべてのIPアドレスからアクセス可能にしています。
# ---------------------------------- Index ----------------------------------- # Elasticsearchに登録する文書のための設定 index: # 登録された文書を分析するためのモジュール analysis:
Elasticsearchの設定についてですが、まず文書登録「index」の部分でElasticsearchに登録する文書のための設定をすることを表しています。
具体的な設定は、インデントされた部分で行われていきます。「analysis」の部分で文書の解析設定をすることを表しています。
Elasticsearchの「analysis」の設定は図3のイメージで行います。まず「filter」で余分な単語を削り「tokenizer」で単語を分割して、「analyzer」で登録、検索するための設定を行っています。
# 検索に有用な単語のみ残すためのフィルター 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番と同様ですが、カンマ区切りのみとフォーマットが異なります。下記のフォーマットは単純ですが、意味が明示的でなくなるのがデメリットです。
同意,承認,許可,賛成 :
ストップワード
検索には寄与しない「が」「を」「に」「の」「と」などの助詞を除くために設定します。下記のように単語を追加していくのみの単純なフォーマットです。
あそこ あたり :
ステミングの設定
カタカナの最後の部分の長音除去の際に使用します。
例:サーバー→サーバ