1
/
5

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

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

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

Elasticsearchのマッピング設定最適化によるインデキシングパフォーマンス改善への取り組み - ZOZO TECH BLOG
こんにちは。EC基盤本部 検索基盤部 検索基盤チームの有村(@paki0o )です。 みなさん、Elasticsearchのマッピングはどこまで厳密に管理されているでしょうか。 弊社では以前のテックブログでご紹介した通り、一部を除き Explicit Mapping にてデータを管理しています。 ...
https://techblog.zozo.com/entry/es-mapping-configuration

はじめに

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

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

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

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

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

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

Mapping | Elasticsearch Guide [7.15] | Elastic
Mapping is the process of defining how a document, and the fields it contains, are stored and indexed. Each document is a collection of fields, which each have their own data type. When mapping your data, you create a mapping definition, which contains a
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html


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

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

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

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

Analyzerの構造

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

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

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

Built-in analyzer reference | Elasticsearch Guide [7.15] | Elastic
Elasticsearch ships with a wide range of built-in analyzers, which can be used in any index without further configuration: The standard analyzer divides text into terms on word boundaries, as defined by the Unicode Text Segmentation algorithm. It removes
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html


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

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

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

続きはこちら

株式会社ZOZOでは一緒に働く仲間を募集しています
同じタグの記事
今週のランキング
株式会社ZOZOからお誘い
この話題に共感したら、メンバーと話してみませんか?