3

次のドキュメントがあるとします。

{
    "title": "Some Title",
    options: {
        "key5": 1,
        "key3": 0,
        "key1": 1,
    }
},
{
    "title": "Some Title",
    options: {
        "key2": 0,
        "key3": 0,
        "key5": 1,
    }
}

optionsファセットを使用してオブジェクトからすべてのキーを取得したい。

options文字列としてのキーの単純な配列である場合、次のようなファセットを使用します。

"facets" : {
    "options" : {
        "terms" : {
            "field" : "options"
        }
    }
}

しかし、私の場合はうまくいきません。

したがって、queryこれら 2 つのドキュメントが返された場合、次のキーを取得する必要があります: ["key5","key3","key1","key2"]

実際にはどのようなファセットが必要ですか?

4

2 に答える 2

2

ファセットを使用してそれを行うことはできません。2 つのオプションがあります -

  1. 現在のドキュメント構造を保持し、型マッピングからキーのリストを取得します ( http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-get-mapping.htmlを参照)。これにより、遭遇したすべてのフィールドを保持するタイプのスキームがもたらされます。

  2. 構造を変更します。キーもフィールドとして保持するため、オプション配列は次のようなドキュメントの配列になります。

    "options" :
    [
    { "key" : "key1", "value" : 1},
    { "key" : "key2", "value" : 0}
    ]

おそらく、検索またはファセット時にキーと値のペアのコンテキストを保持したいので、ネストされたタイプとして構成します ( http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested- type.html )。次に、「options.key」フィールドをファセットして、上位のキーのリストを取得できます。

于 2013-10-21T08:50:17.570 に答える
0

terms_facet私があなたを正しく理解していれば、ネストされたオプションオブジェクトのすべてのフィールドを作成したいと思うでしょう。「ワイルドカードファセット」のようなものですか?

この種の操作を可能にするファセット API の機能はないと思います。私が間違っていなければ、ファセットに使用されるフィールドをマップする必要があるため、インデックス マッピングを調べることで、別のクエリでフィールドを抽出できる可能性があります。

于 2013-10-20T17:34:18.330 に答える