Beispiel #1
0
        static private bool RemoveCategory(string indexUrl, string indexName, string category, string proxyUrl, string proxyUser, string proxyPassword, string basicAuthUser, string basicAuthPassword)
        {
            var searchContext = new ElasticSearchContext(indexUrl,
                                                         indexName,
                                                         proxyUri: proxyUrl, proxyUsername: proxyUser, proxyPassword: proxyPassword,
                                                         basicAuthUser: basicAuthUser, basicAuthPassword: basicAuthPassword);

            var metas = searchContext.Query <Meta>(new ElasticSearchContext.SearchFilter()
            {
                Field = "category",
                Value = "\"" + category + "\""
            }, indexName: indexName).Where(m => m.Category.ToLower() == category.ToLower());  // Exact suchen!!

            if (metas.Count() == 0)
            {
                Console.WriteLine("ERROR: No metadata definition found for " + category);
                return(false);
            }

            foreach (var meta in metas)
            {
                Console.WriteLine("Delete items (" + meta.Id + ")...");
                int count = 0;

                while (true)
                {
                    var items = searchContext.Query <Item>(new ElasticSearchContext.SearchFilter()
                    {
                        Field = "category",
                        Value = "\"" + category + "\""
                    }, indexName: indexName).Where(i => i.Category.ToLower() == category.ToLower() && i.Id.StartsWith(meta.Id + ".")); // exakt suchen ... nach ID kann man nur exact suchen... darum über Category suchen und dann einschränken

                    count += items.Count();
                    if (items.Count() == 0 || count > 1e7)
                    {
                        break;
                    }

                    if (searchContext.RemoveMany <Item>(items, indexName))
                    {
                        Console.WriteLine($"Successfully deleted { items.Count() } items: { searchContext.LastErrorMessage }");
                    }

                    System.Threading.Thread.Sleep(1000);
                }

                Console.WriteLine("================================================================");
                Console.WriteLine(count + " items deleted");
                Console.WriteLine();

                if (searchContext.Remove <Meta>(meta.Id, indexName))
                {
                    Console.WriteLine("Successfully deleted meta info " + meta.Category + " id=" + meta.Id);
                }
            }

            return(true);
        }