2017-10-23 1 views
2

私はフィールドgroupIdでグループ化された最新のレコードを取得しようとしています。これは"group_a"のような文字列です。弾性検索:テキストフィールドでフィールドデータを有効にすることはできますか?

私はthis questionの受け入れ答えを続いたが、私は次のエラーメッセージガット:

がFielddataは、デフォルトではテキストフィールドで無効になっています。逆インデックスを反転してメモリにフィールドデータをロードするには、[your_field_name]にfielddata = trueを設定します。ただし、これは大きなメモリを使用する可能性があることに注意してください。 Elasticsearch docs

書かれている:

あなたがfielddataを有効にする前にあなたは、集計用のテキストフィールドを使用して並べ替え、またはスクリプトにしている理由を、検討してください。 これは通常、には意味がありません。

groupIdが文字列なので、私はテキストフィールドを使用しています。 fielddata: trueに設定してグループ化すると意味がありますか?

または代替手段がありますか?

"field": "groupId.keyword"suggested here)を使用しても機能しませんでした。

ありがとうございます!

答えて

1

.keywordで示唆される回答が正しいです。そのようなマッピングと

{ 
    "aggs": { 
     "group": { 
      "terms": { 
       "field": "groupId.raw" 
      }, 
      "aggs": { 
       "group_docs": { 
        "top_hits": { 
         "size": 1, 
         "sort": [ 
          { 
           "timestamp (or wathever you want to sort)": { 
            "order": "desc" 
           } 
          } 
         ] 
        } 
       } 
      } 
     } 
    } 
} 

:あなたの答えのための

 "groupId": { 
      "type": "text", 
      "fields": { 
       "raw": { 
       "type": "keyword" 
       } 
      } 
     } 
+0

感謝。私はマッピングを調整しましたが、まだ成功しませんでした。あなたが使用するURLを私に教えてください。私は 'GET/myindex/_search'を試しています。 '?search_type = count'は、他の解決策に見られるように非難されています。 –

+1

試してください:POST myindex/_search?pretty – betto86

関連する問題