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
}
]
}