1

2.x から 5.x に移行しています。次のようにインデックスに値を追加しています。

indexInto (indexName / indexType) id someKey source foo

ただし、フィールドごとにすべての値をフェッチすることもできます。

 def getValues(tag: String) ={
client execute {
search(indexName / indexType) query ("_field_names", tag) aggregations (termsAggregation( "agg") field tag size 1)
}

しかし、私はこの例外を受けています:

RemoteTransportException[[8vWOLB2][172.17.0.5:9300][インデックス:データ/読み取り/検索[フェーズ/クエリ]]]; ネストされた: IllegalArgumentException[デフォルトでは、フィールドデータはテキスト フィールドで無効になっています。[my_tag] で fielddata=true を設定して、転置インデックスを元に戻してメモリに fielddata をロードします。ただし、これはかなりのメモリを使用する可能性があることに注意してください。

ここkeywordに示すように使用する可能性があると考えられますが、フィールドは事前に知られていない (ユーザーから送信された) ため、垂直マッピングを使用できません

4

1 に答える 1

1

デフォルトでは、不明なフィールドはすべて、マッピングで指定されていないテキスト フィールドとして Elasticsearch にインデックス付け/追加されます。このようなフィールドのマッピングを見ると、「キーワード」タイプのフィールドが有効になっており、これらのフィールドはインデックス化されていますが分析されていないことがわかります。

GET new_index2/_mappings
{
  "new_index2": {
    "mappings": {
      "type": {
        "properties": {
          "name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

したがって、次のような集計のテキスト フィールドのフィールド値を使用できます。

POST new_index2/_search
{
  "aggs": {
    "NAME": {
      "terms": {
        "field": "name.fields",
        "size": 10
      }
    }
  }
}

小切手name.fields

したがって、フィールド値にシフトできる場合、スカラクエリは機能します。

def getValues(tag: String) = {
   client.execute {
      search(indexName / indexType)
        .query("_field_name", tag)
        .aggregations {
           termsAgg("agg", "field_name.fields")
        }.size(1)
   }
}

お役に立てれば。ありがとう

于 2017-03-14T07:49:50.370 に答える