コード例 #1
0
        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");
        }
コード例 #2
0
 public void ShouldBeAbleToCreateIngestConnection()
 {
     using (var connection = NSonicFactory.Ingest(Hostname, Port, Secret))
     {
         Assert.IsNotNull(connection);
     }
 }
コード例 #3
0
        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("重建索引完成");
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: TheMisir/nsonic
        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());
            }
        }
コード例 #5
0
ファイル: IntegrationTests.cs プロジェクト: RayMMond/nsonic
        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");
            }
        }
コード例 #6
0
        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("全部刷新完成");
        }
コード例 #7
0
        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 { });
            }
        }