1
/
5

【TECH BLOG】Elasticsearchで日本語検索を扱うためのマッピング定義

こんにちは、検索基盤部 検索基盤ブロックの渡です。私は検索基盤ブロックで、主にZOZOTOWNの検索周りのシステム開発に従事しています。

以前の記事では、Elasticsearchのマッピング設定の最適化について取り上げました。そして、今回は日本語による形態素解析を実現するまでの手順をご紹介します。

はじめに

ZOZOTOWNの検索機能では、Elasticsearchを利用しています。現在では検索機能の全般でElasticsearchを利用していますが、リリース当初はキーワード検索を実現するために採用していました。そのため、全文検索を実現するためのマッピング定義やAnalyzerを理解する必要がありました。

Elasticsearchで全文検索を実現させる手順

  1. Elasticsearchの環境準備
  2. マッピングの定義どのようにデータを格納するかを決める
     ・どのようにデータを格納するかを決める
  3. Analyzerの定義どのように分割するか(検索でヒットさせるか)を決める
     ・どのように分割するか(検索でヒットさせるか)を決める
  4. データの投入
  5. 検索

本記事では、2. と 3. を取り扱います。

全文検索のためのマッピング定義

ドキュメント内の各フィールドのデータ構造やデータ型を記述した情報のことをマッピングと呼びます。


下記はマッピング定義の例です。

PUT /sample_index
{
"mappings": {
"properties": {
"age": { "type": "integer" },
"email": { "type": "keyword" },
"name": { "type": "text" }
}
}
}

また、文字列をフィールドに格納するためのデータ型には下記の2種類が存在します。全文検索では、文章から特定の文字列を検索することを指すため、前者のtext型のフィールドを使用します。

  • text型
     Analyzerによる単語の分割が行われ、転置インデックスが形成される
  • keyword型
     Analyzerによる単語の分割が行われず、原形のまま転置インデックスが形成される

Analyzerの構造

全文検索するために文章を単語の単位に分割する処理機能をAnalyzerと呼びます。

下記はマッピング定義の例です。

なお、Elasticsearchがデフォルトで提供するAnalyzerは公式ドキュメントで参照可能です。


PUT sample_index
{
"mappings": {
"properties": {
"goods_name":{
"type": "text",
"analyzer": "standard"
}
}
}
}

そして、Analyzerは3つの処理ブロックから構成されています。

上記の処理を用い、Analyzerは下記の流れで変換処理を行います。

続きはこちら

株式会社ZOZOでは一緒に働く仲間を募集しています
同じタグの記事
今週のランキング