public void VerifyFunctionality() { using var control = NSonicFactory.Control(Hostname, Port, Secret); control.Connect(); control.Info(); control.Trigger("consolidate"); using var search = NSonicFactory.Search(Hostname, Port, Secret); search.Connect(); search.Query("ContentIndex", "default", "example"); search.Suggest("ContentIndex", "default", "example"); search.Query("ContentIndex", "default", "example"); search.Query("ContentIndex", "default", "example"); search.Query("ContentIndex", "default", "example"); search.Suggest("ContentIndex", "default", "example"); search.Suggest("ContentIndex", "default", "example"); search.Suggest("ContentIndex", "default", "example"); using var ingest = NSonicFactory.Ingest(Hostname, Port, Secret); ingest.Connect(); ingest.Push("messages", "user:1", "conversation:1", "This is an example push.", locale: "SWE"); ingest.Pop("messages", "user:1", "conversation:1", "This is an example push."); ingest.Count("messages", "user:1"); ingest.FlushCollection("messages"); ingest.FlushBucket("messages", "user:1"); ingest.FlushObject("messages", "user:1", "conversation:1"); }
public void ShouldBeAbleToCreateIngestConnection() { using (var connection = NSonicFactory.Ingest(Hostname, Port, Secret)) { Assert.IsNotNull(connection); } }
private async Task RebuildIndex() { var messages = from s in context.Messages select s; long count = messages.LongCount(); await Send.Log($"共{count}条消息,现在开始重建索引"); long i = 0; using (var sonicIngestConnection = NSonicFactory.Ingest(Env.SonicHostname, Env.SonicPort, Env.SonicSecret)) { await sonicIngestConnection.ConnectAsync(); foreach (var message in messages) { if (i % 10000 == 0) { await Send.Log($"已完成{i * 100 / count}%"); } await ExecuteAsync(new MessageOption() { ChatId = message.GroupId, MessageId = message.MessageId, UserId = message.GroupId, Content = message.Content }, sonicIngestConnection); i++; } } await Send.Log("重建索引完成"); }
static void Main(string[] args) { var hostname = "localhost"; var port = 1491; var secret = "SecretPassword"; try { using (var control = NSonicFactory.Control(hostname, port, secret)) { control.Connect(); var info = control.Info(); Console.WriteLine($"INFO: {info}"); control.Trigger("consolidate"); } using (var search = NSonicFactory.Search(hostname, port, secret)) { search.Connect(); var queryResults = search.Query("messages", "user:1", "s"); Console.WriteLine($"QUERY: {string.Join(", ", queryResults)}"); var suggestResults = search.Suggest("messages", "user:1", "s"); Console.WriteLine($"SUGGEST: {string.Join(", ", suggestResults)}"); } using (var ingest = NSonicFactory.Ingest(hostname, port, secret)) { ingest.Connect(); ingest.Push("messages", "user:1", "conversation:1", "This is an example push.", locale: null); var popResult = ingest.Pop("messages", "user:1", "conversation:1", "This is an example push."); Console.WriteLine($"POP: {popResult}"); var countResult = ingest.Count("messages", "user:1"); Console.WriteLine($"COUNT: {countResult}"); var flushCollectionResult = ingest.FlushCollection("messages"); Console.WriteLine($"FLUSHC: {flushCollectionResult}"); var flushBucketResult = ingest.FlushBucket("messages", "user:1"); Console.WriteLine($"FLUSHB: {flushBucketResult}"); var flushObjectResult = ingest.FlushObject("messages", "user:1", "conversation:1"); Console.WriteLine($"FLUSHO: {flushObjectResult}"); } Console.WriteLine("Press any key to exit..."); Console.ReadKey(true); } catch (Exception e) { Debug.WriteLine(e.ToString()); } }
public async Task VerifyFunctionalityAsync() { using (var control = NSonicFactory.Control(Hostname, Port, Secret)) { await control.ConnectAsync(); await control.InfoAsync(); await control.TriggerAsync("consolidate"); } using (var search = NSonicFactory.Search(Hostname, Port, Secret)) { await search.ConnectAsync(); await search.QueryAsync("messages", "user:1", "s"); await search.SuggestAsync("messages", "user:1", "s"); await search.QueryAsync("ContentIndex", "default", "example"); await search.SuggestAsync("ContentIndex", "default", "example"); await search.QueryAsync("ContentIndex", "default", "example"); await search.QueryAsync("ContentIndex", "default", "example"); await search.QueryAsync("ContentIndex", "default", "example"); await search.SuggestAsync("ContentIndex", "default", "example"); await search.SuggestAsync("ContentIndex", "default", "example"); await search.SuggestAsync("ContentIndex", "default", "example"); } using (var ingest = NSonicFactory.Ingest(Hostname, Port, Secret)) { await ingest.ConnectAsync(); await ingest.PushAsync("messages", "user:1", "conversation:1", "This is an example push.", locale : "SWE"); await ingest.PopAsync("messages", "user:1", "conversation:1", "This is an example push."); await ingest.CountAsync("messages", "user:1"); await ingest.FlushCollectionAsync("messages"); await ingest.FlushBucketAsync("messages", "user:1"); await ingest.FlushObjectAsync("messages", "user:1", "conversation:1"); } }
/// <summary> /// 私聊搜索返回值: 群组Id:消息Id /// 群聊搜索返回值: 群组Id:消息Id /// </summary> /// <param name="searchOption"></param> /// <returns></returns> public async Task <SearchOption> Search(SearchOption searchOption) { using (var sonicSearchConnection = NSonicFactory.Search(Env.SonicHostname, Env.SonicPort, Env.SonicSecret)) { await sonicSearchConnection.ConnectAsync(); var sonicQuery = await sonicSearchConnection.QueryAsync(searchOption.ChatId.ToString(), Env.SonicCollection, searchOption.Search, limit : searchOption.Take, offset : searchOption.Skip); if (sonicQuery.Length == searchOption.Take) { var sonicQueryCount = await sonicSearchConnection.QueryAsync(Env.SonicCollection, searchOption.ChatId.ToString(), searchOption.Search, limit : searchOption.Take, offset : searchOption.Skip + searchOption.Take); searchOption.Count = sonicQueryCount.Length + sonicQuery.Length + searchOption.Skip; } else { searchOption.Count = sonicQuery.Length + searchOption.Skip; } var Messages = new HashSet <Message>(new MessageComparer()); foreach (var e in sonicQuery) { var tmp = e.Split(":"); long groupid, messageid; if (long.TryParse(tmp[0], out groupid) && long.TryParse(tmp[1], out messageid)) { Messages.Add(new Message() { Id = 0, GroupId = groupid, MessageId = messageid, Content = Encoding.UTF8.GetString(await Cache.GetAsync($"{groupid}:{messageid}")) }); } } searchOption.Messages = new List <Message>(Messages); return(searchOption); } }
private async Task RefreshAll() { var messages = from s in context.Messages select s; long count = messages.LongCount(); await Send.Log($"共{count}条消息,现在开始全部刷新"); long i = 0; using (var sonicIngestConnection = NSonicFactory.Ingest(Env.SonicHostname, Env.SonicPort, Env.SonicSecret)) { await sonicIngestConnection.ConnectAsync(); foreach (var message in messages) { if (i % 10000 == 0) { await Send.Log($"已完成{i * 100 / count}%"); } await ExecuteAsync(new MessageOption() { ChatId = message.GroupId, MessageId = message.MessageId, UserId = message.GroupId, Content = message.Content }, sonicIngestConnection); await Cache.SetAsync( $"{message.GroupId}:{message.MessageId}", Encoding.UTF8.GetBytes(message.Content), new DistributedCacheEntryOptions { }); i++; } } await Send.Log("全部刷新完成"); }
public void ShouldBeAbleToCreateControlConnection() { using var connection = NSonicFactory.Control(Hostname, Port, Secret); Assert.IsNotNull(connection); }
public async Task ExecuteAsync(MessageOption messageOption) { using (var sonicIngestConnection = NSonicFactory.Ingest(Env.SonicHostname, Env.SonicPort, Env.SonicSecret)) { await sonicIngestConnection.ConnectAsync(); var UserIfExists = from s in context.Users where s.UserId.Equals(messageOption.UserId) && s.GroupId.Equals(messageOption.ChatId) select s; if (UserIfExists.Any()) { } else { await context.Users.AddAsync(new User() { GroupId = messageOption.ChatId, UserId = messageOption.UserId }); } await context.Messages.AddAsync(new Message() { GroupId = messageOption.ChatId, MessageId = messageOption.MessageId, Content = messageOption.Content }); await context.SaveChangesAsync(); var UsersQuery = from s in context.Users where s.GroupId.Equals(messageOption.ChatId) select s.UserId; var Users = UsersQuery.ToList(); Users.Add(messageOption.ChatId); try { foreach (var e in Users) { var i = 0; foreach (var s in SplitWords(messageOption.Content)) { if (!string.IsNullOrEmpty(s)) { var tmp = i++.ToString(); await sonicIngestConnection.PushAsync(e.ToString(), Env.SonicCollection, $"{messageOption.ChatId}:{messageOption.MessageId}:{tmp}", s); } } } } catch (AssertionException exception) { await Send.Log($"{messageOption.ChatId}:{messageOption.MessageId}\n{messageOption.Content}"); await Send.Log(exception.ToString()); Console.Error.WriteLine(exception); } await Cache.SetAsync( $"{messageOption.ChatId}:{messageOption.MessageId}", Encoding.UTF8.GetBytes(messageOption.Content.Replace("\n", " ")), new DistributedCacheEntryOptions { }); } }