Использование поиска с RavenDB

У меня есть следующие определения индекса

        public SearchIndex()
    {
        this.Map = users => from user in users
                            select new
                                {
                                    FirstName = user.FirstName, 
                                    LastName = user.LastName, 
                                    MobilePhoneNumber = user.MobilePhoneNumber, 
                                    EmailAddress = user.EmailAddress
                                };
        Index(x => x.FirstName, FieldIndexing.Analyzed);
        Index(x => x.LastName, FieldIndexing.Analyzed);
        Index(x => x.MobilePhoneNumber, FieldIndexing.Analyzed);
        Index(x => x.EmailAddress, FieldIndexing.Analyzed);

    }

И я пытаюсь использовать полнотекстовый поиск Вот так

 var s = GetSession().Query<Registrants, StudentSearchIndex>()
                                 .Search(m => m.LastName, lastName, boost: 10, escapeQueryOptions:EscapeQueryOptions.EscapeAll)
                                 .Search(m => m.FirstName, firstName, boost: 5)
                                 .Search(m => m.MobilePhoneNumber, phoneNumber)
                                 .Search(m => m.EmailAddress, emailAddress);

Однако, когда я использую приведенное выше выражение в коде. Я получаю следующее сообщение об ошибке

Выражение типа «System.Object» нельзя использовать для параметра типа «System.String» метода «Raven.Client.Linq.IRavenQueryable1[Spurro.Data.RavenDB.Models.Registrants] Search[Registrants](System.Linq.IQueryable1[Spurro.Data.RavenDB.Models.Registrants], System.Linq.Expressions.Expression1[System.Func2[ Spurro.Data.RavenDB.Models.Registrants,System.Object]], System.String, System.Decimal, Raven.Client.SearchOptions, Raven.Client.EscapeQueryOptions)'

Пожалуйста, что я делаю не так


person Seth IK    schedule 27.11.2013    source источник


Ответы (2)


Я получил аналогичное сообщение об ошибке, когда ввод поиска (LastName, FirstName... в этом случае) был нулевым. Кстати, MobilePhoneNumber должен быть NotAnalyzed.

person Tung Chau    schedule 29.11.2013

Нет решения для этого как такового, но я попал сюда, потому что использовал следующий синтаксис для настройки индексации и получил ту же ошибку, что описана в исходном вопросе. :

public SearchIndex()
{
    // Map .....

    Indexes = new Dictionary<Expression<Func<StaffDetail, object>>, FieldIndexing>
    {
        {sd => sd.FirstName, FieldIndexing.Analyzed},
        {sd => sd.LastName, FieldIndexing.Analyzed},
        {sd => sd.MobilePhoneNumber, FieldIndexing.Analyzed},
        {sd => sd.EmailAddress, FieldIndexing.Analyzed}
    };
}

Правильный подход соответствует исходному вопросу.

person rogersillito    schedule 02.08.2014