web-dev-qa-db-ja.com

フィールドとfield.keywordの違い

Elasticsearchインデックスに複数のフィールドを持つドキュメントを追加すると、Kibanaでそれを表示すると、同じフィールドが2回表示されます。それらの1つが呼び出されます

some_field

もう一つは呼ばれます

some_field.keyword

この動作はどこから来て、両方の違いは何ですか?

PS:そのうちの1つは集約可能であり(意味がわからない)、もう1つは集約できません(キーワードなし)。

20
tomak

Update:短い答えは、そのタイプです:テキストは分析されます、つまり、それはに分割されます保存されている場合は個別の単語。フィールド内の1つまたは複数の単語をフリーテキスト検索できます。 .keywordフィールドは同じ入力を受け取り、1つの大きな文字列として保持されます。つまり、集約できるため、ワイルドカード検索を使用できます。集約可能とは、elasticsearchの集約で使用できることを意味します。これは、SQLグループに似ているため、SQLグループに似ています。 Kibanaでは、.keywordフィールドを集計で使用して、個別の値などをカウントします。


text vs. keyword に関するこの記事をご覧ください。

簡単に言うと、Elasticsearch 5.0以降、string型はtextおよびkeyword型に置き換えられました。それ以来、明示的なマッピングを指定しない場合、文字列を含む単純なドキュメントの場合:

{
  "some_field": "string value"
}

以下の動的マッピングが作成されます:

{
  "some_field": {
    "type" "text",
    "fields": {
      "keyword": {
        "type": "keyword",
        "ignore_above": 256
      }
    }
  }
}

その結果、some_fieldで全文検索を実行したり、some_field.keywordフィールドを使用してキーワード検索や集計を実行したりすることができます。

これがあなたの質問に答えてくれることを願っています。

24

this 問題を見てください。その中にあなたの質問のいくつかの説明があります。大ざっぱに言えば some_fieldは分析され、全文検索に使用できます。一方 some_field.keywordは分析されず、用語クエリまたは集計で使用できます。

3
briarheart