3

Elastic Search でドキュメントに統計ファセットを使用しようとしたときに、いくつかの問題に遭遇しました。その結果、Elastic Search google グループに次の投稿がありました - https://groups.google.com/forum/#!topic/elasticsearch/wNjrnAC_KOYを参照してください。ドキュメントでネストされた型を使用して、コレクション プロパティに個別の合計を提供することに関する回答の推奨事項を適用しようとしました ( https://groups.google.com/forum/#!topic/elasticsearch/wNjrnAC_KOYを参照) 。

つまり、MyItem のコレクションを持つ MyType のインスタンスが多数あることになります。MyItem の一部のコレクションには、金額が一致するインスタンスがあります。つまり、最初のドキュメントには、金額が 100 の myitem のインスタンスが 2 つある可能性があります。ネストされた型がなければ、統計ファセットは一意ではないため、各金額を集計するとは思いません。

そのため、ドキュメント構造 (以下と同様) を作成し、インデックスを作成しました。インデックスを作成する前に、ネストされたドキュメントを作成するために次のコードを使用しました。

client.MapFromAttributes<Page>(); 


[ElasticType(Name="page", DateDetection = true, NumericDetection = true, SearchAnalyzer = "standard",IndexAnalyzer = "standard")]
    public class MyType
    {
        public int TypeId { get; set; }
        public string Name { get; set; }
        public ANotherType AnotherProperty { get; set; }
        public DateTime Created { get; set; }

        [ElasticProperty(Type = FieldType.nested, Name="mycollection")]
        public List<MyItem> MyItems { get; 
    }

    public class MyItem
    {
        public decimal Amount {get;set;}
    }

ただし、ネスト API を介して次のクエリを実行すると、結果が得られません。

query.Index("pages")
        .Type("page")
        .From(0)
        .Size(100)
           .FacetStatistical("TotalAmount", x => x.Nested("donations")
           .OnField("amount")));

さらに、Chrome プラグイン PostMan を介して次のことも試しました。

{
   "facets": {
      "test": {
         "statistical": {
            "field": "amount"
         },
         "nested": "mycollection"
      }
   },
   "size":0
}'

次のような応答を受け取ります。

「..ファセットのネストされたパス [mycollection] はネストされていません..」

これについての考えは素晴らしいでしょう。

ティム

4

1 に答える 1

3

次のようにオブジェクトをマップしてみてください。

client.MapFluent<MyType>(m=>m
    .MapFromAttributes()
    .NestedObject<MyItem>(no=>no
        .Name(p=>p.MyItems.First())
        .Dynamic()
        .Enabled()
        .IncludeInAll()
        .IncludeInParent()
        .IncludeInRoot()
        .MapFromAttributes()
        .Path("full")
        .Properties(pprops => pprops
            .String(ps => ps
                .Name(p => p.FirstName)
                .Index(FieldIndexOption.not_analyzed)
            )
            //etcetera
        )
    )
);

client.MapFromAttributes()非常に限定されており、おそらく 1.0 リリースで削除される予定です。プロパティ名に注釈を付けるのは素晴らしいことですが、すぐに表現できることが制限されます。mapfluent 呼び出しの MapFromAttributes() は、int を int として、float を float として、DateTime を日付などとして入力するための優れた方法です。

于 2013-07-25T13:26:12.940 に答える