使用Elasticsearch查看搜索引擎机制(7):映射篇

[上篇] 用Elasticsearch觀察搜索引擎的機制(6):使用Luke進行索引操作

首先, 或者 最初, 或者 首要的是,

上一次,我使用Luke来浏览Elasticsearch索引。
这一次,我将理解Elasticsearch的映射。

地图制作的过程和结果

    • ドキュメント内の各フィールドのデータ構造やデータ型を定義したもの

リレーショナルデータベースのテーブル定義に相当

型のみならず、フィールドの検索に必要な解析処理(Analysis)設定も行う

映射的类型

    • 動的マッピング(自動)

Elasticsearchはスキーマレスで、フィールドの型推論が可能
ドキュメントのインデクシング時、フィールド毎に型マッピングを自動設定

静的マッピング(手動)

事前に型マッピングを自前定義する仕組み
自動マッピングされる型や解析処理が検索要件を満たさない場合使用

尝试进行动态映射。

    • 一冊の本を1つのドキュメントとして登録

インデックス: book_index (インデックスは、Elasticsearchクラスターに存在)

PUT book_index/_doc/1
{
  "title": "Elasticsearch Tech",
  "author": "taro momo",
  "tags": [
    "Elasticsearch",
    "Tech"
  ],
  "pub_date": "2022-07-05T07:40:00",
  "price": 1000,
  "tax": 0.1,
  "published": true
}
    マッピング定義を確認
GET /book_index/_mapping
    結果、各フィールドがElasticsearch基本型に自動マッピングされている(“type”)
{
  "book_index": {
    "mappings": {
      "properties": {
        "author": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "price": {
          "type": "long"
        },
        "pub_date": {
          "type": "date"
        },
        "published": {
          "type": "boolean"
        },
        "tags": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "tax": {
          "type": "float"
        },
        "title": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}

尝试进行静态映射。

    インデックスbook_indexを削除
DELETE /book_index
    • 手動で型マッピング定義

“tags”フィールドを分割せず、完全一致時のみ検索できるように設定

“type”: “keyword” <- アナライザーによる単語分割処理を行わない
“index”: true <- インデクシング対象

PUT /book_index
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text"
      },
      "author": {
        "type": "text"
      },
      "tags": {
        "type": "keyword",
        "index": true
      },
      "price": {
        "type": "long"
      },
      "pub_date": {
        "type": "date"
      },
      "published": {
        "type": "boolean"
      },
      "tax": {
        "type": "float"
      }
    }
  }
}
    • ドキュメントを1件登録

フィールド”title”と”tags”に、同じ値”Elasticsearch-Tech”を付与しても、解析処理が異なる

“title”フィールドは、アナライザーにより2つの単語に分割しインデクシング

“Elasticsearch”
“Tech”

“tags”フィールドは、分割されず1つの単語としてインデクシング

“Elasticsearch-Tech”

PUT book_index/_doc/1
{
  "title": "Elasticsearch-Tech",
  "author": "taro momo",
  "tags": [
    "Elasticsearch-Tech"
  ],
  "pub_date": "2022-07-05T07:40:00",
  "price": 1000,
  "tax": 0.1,
  "published": true
}
    • “title”フィールドを、単語”Elasticsearch”で検索

結果、ドキュメントが1件ヒット

“Elasticsearch-Tech”が”Elasticsearch”と”Tech”に分割されるため

GET /book_index/_search
{
  "query": {
    "match": {
      "title": "Elasticsearch"
    }
  }
}
    • “tags”フィールドを、”Elasticsearch”で検索

結果、ヒットせず

“Elasticsearch-Tech”が分割されず、1つの単語として扱われるため

GET /book_index/_search
{
  "query": {
    "match": {
      "tags": "Elasticsearch"
    }
  }
}

最后

我对Elasticsearch的映射有了了解。
下次会继续。敬请期待。

下一次,在Elasticsearch中查看搜索引擎的工作原理(8): 解决Kibana启动错误的故障排除。
广告
将在 10 秒后关闭
bannerAds