在我开始之前让我说我是RavenDB的新手。RavenDB保存到磁盘查询
我只是在评估它,并且正在使用RavenDB-Build-616构建。我有服务器上运行,这是我手动启动“Raven.Server.exe”,并有下面的测试代码
public class RavenFullTextSearchDemo
{
private DocumentStore documentStore;
private List<string> firstNames = new List<string>() { "John", "Peter", "Paul", "Sam", "Brendon" };
private List<string> lastNames = new List<string>() { "Simons", "Black", "Benson", "Jones", "Breckwell" };
private Random rand = new Random();
public RavenFullTextSearchDemo(DocumentStore documentStore)
{
this.documentStore = documentStore;
}
public void Run()
{
IndexCreation.CreateIndexes(typeof(RavenFullTextSearchDemo).Assembly, this.documentStore);
using (IDocumentSession session = documentStore.OpenSession())
{
//add some random Users
for (int i = 0; i < 5; i++)
{
string name = string.Format("{0} {1},",
firstNames[rand.Next(firstNames.Count)], lastNames[rand.Next(lastNames.Count)]);
User newUser = new User { Name = name };
session.Store(newUser);
}
session.SaveChanges();
//Seem to have to give it some time to persist??? Seems very odd
//If I take the following line out, I dont get any users back at all
Thread.Sleep(3000);
PrintCurrentUsers(session);
var searchName = firstNames[rand.Next(firstNames.Count)];
Console.WriteLine(string.Format("Looking for users with Name starting with '{0}'\r\n", searchName));
Console.WriteLine("Simple starts with");
foreach (var person in Queryable.Where(session.Query<User, User_ByName_FullTextSearch>(), x => x.Name.StartsWith(searchName)))
{
Console.WriteLine(person.Name);
}
Console.WriteLine("\r\n");
Console.WriteLine("Complex starts with");
IQueryable<User> query = session.Query<User, User_ByName_FullTextSearch>();
query = searchName.Split().Aggregate(query, (current, part) => current.Where(x => x.Name.StartsWith(part)));
foreach (var person in query)
{
Console.WriteLine(person.Name);
}
}
}
private void PrintCurrentUsers(IDocumentSession session)
{
IList<User> users = new List<User>();
Console.WriteLine("The current list of users is :\r\n");
foreach (User user in session.Query<User>().ToList())
{
Console.WriteLine(string.Format("UserName : {0}", user.Name));
}
Console.WriteLine("\r\n\r\n");
}
}
public class User_ByName_FullTextSearch : AbstractIndexCreationTask<User>
{
public User_ByName_FullTextSearch()
{
Map = users => from user in users
select new { user.Name };
Index(x => x.Name, FieldIndexing.Analyzed);
}
}
如果调用此方法像这样
using (var documentStore = new DocumentStore { Url = documentStoreLocation, DefaultDatabase = "ravenTest-" + DateTime.Now.Ticks })
{
documentStore.Initialize();
RavenFullTextSearchDemo ravenFullTextSearchMessAround = new RavenFullTextSearchDemo(documentStore);
ravenFullTextSearchMessAround.Run();
}
有什么奇怪继续,因为我似乎需要Thread.Sleep为了新的用户对象被保存到磁盘。如果我没有那个Thread.Sleep,那么在“PrintCurrentUsers”方法调用中我什么都看不到。
这是输出我没有了Thread.Sleep
得到+++++++++++++++++++++++++++++++ +++++++++++++++++++++++++ 用户的当前列表为:
寻找用户名称以“保”
简单的开始与 ·保罗·琼斯,
复杂打头 ·保罗·琼斯,
虽然这是我的输出用的Thread.Sleep得到
用户的当前列表为:
用户名:保罗黑色, 用户名:保罗·本森, 用户名:保罗·琼斯, 用户名:彼得·布莱克, 用户名:保罗·西蒙斯,
+++++++++++++++++++++++++++++++++++++ +++++++++++++++++++
正在寻找名字以'Paul'开头的用户
点简单的开始与 保罗黑色, 保罗·本森, 保罗·琼斯, 保罗·西蒙斯,
情结开始与 保罗黑色, 保罗·本森, 保罗·琼斯, 保罗·西蒙斯,
我究竟做错了什么。我在其他地方有其他代码插入一堆用户,并立即获得它们,这似乎工作正常。
任何线索有人吗?
西蒙是正确的,添加行.Customize(X => x.WaitForNonStaleResults(TimeSpan.FromSeconds(5)))来查询,以允许它等待最多5秒刷新索引,这是Raven遵循的'默认安全'范式的一部分,更好地为陈旧数据提供比无数据更好的服务 – JonVD 2012-04-12 15:13:21
酷得到它谢谢 – sacha 2012-04-12 15:25:48