Exemple #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");
        }
Exemple #2
0
 public void ShouldBeAbleToCreateIngestConnection()
 {
     using (var connection = NSonicFactory.Ingest(Hostname, Port, Secret))
     {
         Assert.IsNotNull(connection);
     }
 }
Exemple #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("重建索引完成");
        }
Exemple #4
0
        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());
            }
        }
Exemple #5
0
        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);
            }
        }
Exemple #7
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("全部刷新完成");
        }
Exemple #8
0
        public void ShouldBeAbleToCreateControlConnection()
        {
            using var connection = NSonicFactory.Control(Hostname, Port, Secret);

            Assert.IsNotNull(connection);
        }
Exemple #9
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 { });
            }
        }