0

我有一个下一个索引:

 public class TestIndex : AbstractIndexCreationTask<Resource>
    {
        public class Result
        {
            public string Caption { get; set; }
            public string TestVal{ get; set; }
        }
        public TestIndex()
        {
            Map = resources => from r in resources
                               select new
                               {
                                   Caption = r.Caption,
                                   TestVal = r.Caption
                               };

        }
    }

这就是我查询它的方式:

            var data = session.Query<Resource, TestIndex>()
                              .Customize(x => x.WaitForNonStaleResults())
                              .AsProjection<TestIndex.Result>()
                              .ToList();

问题是,当 Caption 填充了预期值时,每个对象的查询 TestVal 属性为空。

4

2 回答 2

1

如果要从索引进行投影,则需要存储该值

于 2013-08-28T11:25:02.577 回答
1

我有类似的问题,对索引的查询仍然会返回空值。事实证明,我做了快速测试——在每个程序运行索引也运行之后,它没有足够的时间做 biild。在这种情况下,解决方案是使用自定义。WaitForNonStaleResultsAsOfNow():

Query<ResultType,IndexType>()
.Customize(customization => customization.WaitForNonStaleResultsAsOfNow()) //this is imprtant when you using quick tests, not in production server
.Where(...).AsProjection<ResultType>

您还需要记住将数据从索引存储到数据库并在索引类的末尾使用:

StoreAllFields(FieldStorage.Yes);
于 2013-12-06T11:11:15.330 回答