0

この回答 で説明されているように、ドキュメントが投稿された時期に基づいてドキュメントをブーストしようとしています。

次のインデックス定義は、Article エンティティと Recipe エンティティが入力されたインデックスを作成して正常に機能します。

public class TestIndex : AbstractMultiMapIndexCreationTask<Result>
{
    public TestIndex()
    {
        AddMap<Article>(docs => from doc in docs
                                where !doc.IsDeleted
                                select new Result
                                {
                                    Id            = doc.Id,
                                    Title         = doc.Title,
                                    DatePublished = doc.DatePublished
                                }.Boost(doc.DatePublished.Ticks / 1000000f));

        AddMap<Recipe>(docs => from doc in docs
                               where !doc.IsDeleted
                               select new Result
                               {
                                   Id            = doc.Id,
                                   Title         = doc.Title,
                                   DatePublished = doc.DatePublished
                               }.Boost(doc.DatePublished.Ticks / 100000f));
    }

    public override string IndexName
    {
        get { return "Tests/WithBoost"; }
    }
}

ドキュメントをアイテムとして保存するために Reduce を追加しようとするとResult、インデックスは結果を生成しなくなります。

public class TestIndex : AbstractMultiMapIndexCreationTask<Result>
{
    public TestIndex()
    {
        AddMap<Article>(docs => from doc in docs
                                where !doc.IsDeleted
                                select new Result
                                {
                                    Id            = doc.Id,
                                    Title         = doc.Title,
                                    DatePublished = doc.DatePublished
                                }.Boost(doc.DatePublished.Ticks / 100000f));

        AddMap<Recipe>(docs => from doc in docs
                               where !doc.IsDeleted
                               select new Result
                               {
                                   Id            = doc.Id,
                                   Title         = doc.Title,
                                   DatePublished = doc.DatePublished
                               }.Boost(doc.DatePublished.Ticks / 100000f));

        Reduce = docs => from doc in docs
                         group doc by doc.Id into g
                         select new Result
                         {
                             Id            = g.First().Id,
                             Title         = g.First().Title,
                             DatePublished = g.First().DatePublished
                         };
    }

    public override string IndexName
    {
        get { return "Tests/WithBoost"; }
    }
}

の削減機能を使用する場合、ドキュメントのブースティングはサポートされていAbstractMultiMapIndexCreationTask<T>ますか?

私が考えているのは、それが をBoost()返すということです。コレクションは実際には ではなくBoostedValueReduce 式に渡されているので、Reduce 式は入力に対してコンパイルできませんか?IEnumerable<BoostedValue>IEnumerable<Result>

4

1 に答える 1

0

(この回答は、元の投稿のコメントから引き継がれました)

公開日だけで並べ替えたい場合は、 boost - use を使用しないでください.OrderByDescending(x=> x.DatePublished)

結合されたマルチマップの結果に対してクエリを実行する方法を知りたいだけの場合は、次のように簡単に実行できます。

var results = session.Query<Result, TestIndex>()
                     .Search(x=> x.Title, "whatever")
                     .As<object>()
                     .ToList();

var articles = results.OfType<Article>();
var recipies = results.OfType<Recipe>();

ブーストしているので、検索したいと思います。また、ここに記載されているように、検索可能なフィールドを分析済みとしてマークする必要があります

また、記事とレシピを別々のリストに分けたいと思っていると思います。そうでない場合は、オブジェクト リストを直接使用できます。または、両方が使用する基本クラスまたはインターフェースがある場合は、オブジェクトの代わりにそれを使用できます.As<IWhatever>()

于 2012-12-31T17:19:20.923 に答える