0

テキスト検索結果を表示するインデックスがあります。結果は常に 1 か月分のみ表示されます。

毎月の結果数を表示する必要があります。例は一番下にあります。

ファセット検索が機能することは理解していますが、手動で範囲を作成/生成することはできず、膨大な量の範囲が発生します。正しいツールではない ResultTransformers も含め、公式ドキュメントからすべてを試しました。だから私は何かを見落としていたに違いないことを願っています。

Map = transactions => from transaction in transactions
select new
    {
        Description = new object[] { transaction.Description, transaction.Items.Select(i => i.Name), transaction.Documents.Select(i => i.Name) },
        Account_UserName = transaction.Account.UserName,
        Time = transaction.Time
    };

私が期待する結果は次のようなものです:

 [{
    Year: 2013,
    Month: 12,
    Count: 3
 },
 {
    Year: 2013,
    Month: 11,
    Count: 10
 }]
4

2 に答える 2

0

掘り下げた後、動的集計が機能することがわかりました。匿名オブジェクトが機能しなかったため、フィールド month を追加しました。

Map = transactions => from transaction in transactions
select new
    {
        Value = transaction.Value,
        Description = new object[] { transaction.Description, transaction.Items.Select(i => i.Name) },
        Account_UserName = transaction.Account.UserName,
        Time = transaction.Time,
        Month = new DateTime(transaction.Time.Year, transaction.Time.Month, 1) // new field
    };

そして、拡張クエリ.AggregateBy(x => x.Month).CountOn(x => x.Month);

var result = _session.Query<Transaction, Transaction_Search>()
    .AggregateBy(x => x.Month)
    .CountOn(x => x.Month);

これにより、何らかの変換が行われた後、望ましい結果が得られます。

于 2013-11-22T08:31:13.530 に答える
0

各インデックス レコードに Month 値をスタンプして、そこから移動します。

Map = transactions => from transaction in transactions
select new
    {
        Description = new object[] { transaction.Description, transaction.Items.Select(i => i.Name), transaction.Documents.Select(i => i.Name) },
        Account_UserName = transaction.Account.UserName,
        Month = transaction.Time.Month + "/" + transaction.Time.Year, // To be able to group on Months
        Time = transaction.Time
    };

そこから、Month フィールドでファセットを使用するか、Reduce 関数を使用して Months に合計をインデックス付けし、この計算を検索可能にします。

于 2013-11-10T09:14:55.630 に答える