Строковый запрос RavenDb, возвращающий неожиданные результаты

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

        IDocumentSession documentSession = store.OpenSession();
        var schools = documentSession.Query<School>().Where(x => x.SchoolName == "My Primary School").ToList();
        foreach (var school in schools)
        {
            Console.WriteLine(school);
        }

        schools = documentSession.Query<School>().Where(x => x.Id == "109940").ToList();
        foreach (var school in schools)
        {
            Console.WriteLine(school.SchoolName);  // returns My Primary School
        }

При выполнении первого запроса записи не возвращаются, хотя у меня есть соответствующая запись в базе данных. однако второй запрос возвращает запись, которую я ожидаю. Я запускаю базу данных как встроенную, и я сам не устанавливал никаких индексов.

Обновление: поэтому, если я настрою запрос на ожидание неустаревших результатов, он будет работать нормально, нужно ли мне создавать постоянный индекс?


person Kev Hunter    schedule 22.07.2012    source источник


Ответы (1)


Вот как ведет себя RavenDB. Если нет индекса для удовлетворения вашего запроса, RavenDB динамически создаст индекс по запросу и вернет устаревшие результаты.

Вот почему во второй раз вы получаете результат, который вы ожидали. Это один из ключевых принципов RavenDB: пусть индексы выполняют работу в фоновом режиме и допускают устаревшие результаты, а не блокируют запрос до тех пор, пока индекс не устареет.

В рабочей среде временный индекс будет повышен до автоматического индекса, как только RavenDB обнаружит, что индекс регулярно используется. Вместо ретрансляции автоматических индексов вы также можете в какой-то момент создать статический индекс.

person Fitzchak Yitzchaki    schedule 23.07.2012
comment
Спасибо, я создал индекс, и это зафиксировало результаты, я предполагал, что Raven создаст индекс при первом использовании, а затем вернет результаты, очевидно, это не так. Удивительно то, что если я использую начало с, некоторые записи возвращались, а другие не возвращались. - person Kev Hunter; 23.07.2012