Elasticsearchのデータ構造と解析器

mappingに関する説明 Elasticsearchのmappingは、index内のドキュメントに適用されるデータ構造および設定を定義します。

動的なマッピング

動的マッピングは、自動的にインデックスを作成し、各フィールドのデータタイプや分詞方法などの設定を行います。 例:データ挿入

PUT /blog/_doc/1
{
  "pub_date": "2020-02-01",
  "headline": "初記事",
  "body": "初めての投稿です。",
  "writer_id": 9876
}

PUT /blog/_doc/2
{
  "pub_date": "2020-02-02",
  "headline": "二つ目の記事",
  "body": "二回目の投稿です。",
  "writer_id": 9876
}

PUT /blog/_doc/3
{
  "pub_date": "2020-02-03",
  "headline": "三番目の記事",
  "body": "三回目の投稿です。",
  "writer_id": 9876
}
マッピング確認:

GET blog/_mapping
検索試行:

GET /blog/_search?q=2020        // 結果なし             
GET /blog/_search?q=2020-02-01           // 結果1件
GET /blog/_search?q=pub_date:2020-02-01     // 結果1件
GET /blog/_search?q=pub_date:2020          // 結果なし
異なる検索結果は、データタイプの違いによるものです。

手動マッピング

解析器(Analyzer)について

解析器は文を単語に分割し、正規化を行うことで検索精度を向上させます。

Analyzerの構成要素:

1. 文字フィルター:HTMLタグや特殊文字を処理。 2. トークナイザー:文を単語に分割。 3. トークンフィルター:小文字化、ストップワード除去、同義語変換など。 解析器テスト:

GET /_analyze
{
  "analyzer": "standard",
  "text": "分析対象のテキスト 99"
}

結果:
{
  "tokens" : [
    {
      "token" : "分析",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "<KANJI>",
      "position" : 0
    },
    {
      "token" : "対象",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "<KANJI>",
      "position" : 1
    },
    {
      "token" : "の",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "<HIRAGANA>",
      "position" : 2
    },
    {
      "token" : "テキスト",
      "start_offset" : 5,
      "end_offset" : 10,
      "type" : "<KATAKANA>",
      "position" : 3
    },
    {
      "token" : "99",
      "start_offset" : 11,
      "end_offset" : 13,
      "type" : "<NUM>",
      "position" : 4
    }
  ]
}

タグ: Elasticsearch Mapping Analyzer

8月6日 19:29 投稿