0

私はelasticsearchにまったく慣れていません。NESTを使用してエラスティックにクエリを実行しています。以下は私のコードスニペットです。

var searchResults =
            elasticClient.Client.Search<T>(
            s => s
                    .Size(20)
                    .Fields(core)
                    .QueryString(String.Format("*{0}*", query)).MinScore(1).QueryString(String.Format("*{0}*", query.Replace(" ", "")))
                    .Highlight(h => h
                    .PreTags("<b>")
                    .PostTags("</b>")
                    .OnFields(f => f
                        .PreTags("<em>")
                        .PostTags("</em>")
                    )
                )
            );

var suggestResults = elasticClient.Client.Suggest<T>(s => s
                                        .Term("suggest", m => m
                                            .SuggestMode(SuggestMode.Always)
                                            .Text(query)
                                            .Size(10)
                                            .OnField(core)
                                        ));

var aggregation = elasticClient.Client.Search<T>(s => s
            .Aggregations(a => a
                .Terms("term_items", gh=>gh
                    .Field(p=>p.Town)
                    .Aggregations(gha=>gha
                        .SignificantTerms("bucket_agg", m => m
                            .Field(p => p.Town)
                            .Size(2)
                            .Aggregations(ma => ma.Terms("Town", t => t.Field(p => p.Town)))
                        )
                    )
                )
            )
);

ドキュメントのリスト (指定したドメイン オブジェクトのリスト) を取得しますが、提案と集計の場合、ドメイン オブジェクトは返されませんか?

事前にお詫び申し上げます。正しい方向に向けていただければ幸いです。

NESTに実装する方法を探しています。

4

1 に答える 1

0

Aggs集計に到達するには、結果のプロパティを使用する必要があります。ドキュメントによると:

集計の結果は、リクエストで指定されたキーを使用して、レスポンスの Aggs プロパティからアクセスされます...

あなたの例では、これは"term_items". サブ集計も行っているため、サブ集計に指定されたキーを使用して、トップレベルの集計ごとにこれらを抽出する必要があります - "bucket_agg"。コードは次のようになります

var agg = results.Aggs.Terms("term_items");
if (agg!= null && agg.Items.Count > 0)
{
    foreach (var termItemAgg in agg.Items)
    {
        // do something with the aggregations
        // the term is accessed using the Key property
        var term = termItemAgg.Key;

        // the count is accessed through the DocCount property
        var count = termItemAgg.Count;

        // now access the result of the sub-aggregation
        var bucketAgg = termItemAgg.Aggs.SignificantTerms("bucket_agg");

        // do something with your sub-aggregation results
    }
}

詳細については、ドキュメントを参照してください。

提案を取得するSuggestionsには、メソッドを呼び出すときに指定したキーを使用して、結果オブジェクトのプロパティにアクセスしますElasticClient.Suggest。何かのようなもの

var suggestions = result.Suggestions["suggest"]
                .FirstOrDefault()
                .Options
                .Select(suggest => suggest.Payload)
                .ToList();

お役に立てれば 。

于 2015-11-19T15:36:06.453 に答える