示例#1
0
        private static IElasticClient GetElasticClient(Uri serverUri, bool deleteExistingIndexes = false) {
            var settings = new ConnectionSettings(serverUri).SetDefaultIndex("_all");
            settings.EnableMetrics();
            settings.SetJsonSerializerSettingsModifier(s => {
                s.ContractResolver = new EmptyCollectionElasticContractResolver(settings);
                s.AddModelConverters();
            });
            settings.MapDefaultTypeNames(m => m.Add(typeof(PersistentEvent), "events").Add(typeof(Stack), "stacks"));
            settings.MapDefaultTypeIndices(m => m.Add(typeof(Stack), ElasticSearchRepository<Stack>.StacksIndexName));
            settings.MapDefaultTypeIndices(m => m.Add(typeof(PersistentEvent), ElasticSearchRepository<PersistentEvent>.EventsIndexName + "-*"));
            settings.SetDefaultPropertyNameInferrer(p => p.ToLowerUnderscoredWords());

            var client = new ElasticClient(settings);
            ConfigureMapping(client, deleteExistingIndexes);

            return client;
        }
        public IElasticClient ConfigureElastic()
        {
            var connectionString = ConfigurationManager.ConnectionStrings["Elastic"];
            if (connectionString == null)
                throw new ArgumentException("No elastic connection string found");

            var data = connectionString.ConnectionString.Split(';');

            var url = data.FirstOrDefault(x => x.StartsWith("Url", StringComparison.CurrentCultureIgnoreCase));
            if (url == null)
                throw new ArgumentException("No URL parameter in elastic connection string");
            var index = data.FirstOrDefault(x => x.StartsWith("DefaultIndex", StringComparison.CurrentCultureIgnoreCase));
            if (index.IsNullOrEmpty())
                throw new ArgumentException("No DefaultIndex parameter in elastic connection string");

            index = index.Substring(13);

            var node = new Uri(url.Substring(4));

            var settings = new Nest.ConnectionSettings(node);
            settings.SetDefaultIndex(index);

            settings.SetDefaultTypeNameInferrer(type => type.FullName.Replace("Demo.Application.ServiceStack.", "").Replace('.', '_'));
            // Disable camel case field names (need to match out POCO field names)
            settings.SetDefaultPropertyNameInferrer(field => field);

            var client = new ElasticClient(settings);
            if (!client.IndexExists(index).Exists)
                client.CreateIndex(index, i => i
                        .Analysis(analysis => analysis
                            .TokenFilters(f => f
                                .Add("ngram", new Nest.NgramTokenFilter { MinGram = 2, MaxGram = 15 })
                                )
                            .Analyzers(a => a
                                .Add(
                                    "default_index",
                                    new Nest.CustomAnalyzer
                                    {
                                        Tokenizer = "standard",
                                        Filter = new[] { "standard", "lowercase", "asciifolding", "kstem", "ngram" }
                                    }
                                )
                                .Add(
                                    "suffix",
                                    new Nest.CustomAnalyzer
                                    {
                                        Tokenizer = "keyword",
                                        Filter = new[] { "standard", "lowercase", "asciifolding", "reverse" }
                                    }
                                )
                            )
                        ));

            return client;
        }
 public ConnectionSettings CreateConnectionFromSettings()
 {
     var clientSettings = new ConnectionSettings(new Uri(string.Format("http://{0}:{1}", Host, Port)));
     clientSettings.SetDefaultPropertyNameInferrer(name => name);
     return clientSettings;
 }
示例#4
0
        public IElasticClient ConfigureElastic()
        {
            var connectionString = ConfigurationManager.ConnectionStrings["Elastic"];

            if (connectionString == null)
            {
                throw new ArgumentException("No elastic connection string found");
            }

            var data = connectionString.ConnectionString.Split(';');

            var url = data.FirstOrDefault(x => x.StartsWith("Url", StringComparison.CurrentCultureIgnoreCase));

            if (url == null)
            {
                throw new ArgumentException("No URL parameter in elastic connection string");
            }
            var index = data.FirstOrDefault(x => x.StartsWith("DefaultIndex", StringComparison.CurrentCultureIgnoreCase));

            if (index.IsNullOrEmpty())
            {
                throw new ArgumentException("No DefaultIndex parameter in elastic connection string");
            }

            index = index.Substring(13);

            var node = new Uri(url.Substring(4));

            var settings = new Nest.ConnectionSettings(node);

            settings.SetDefaultIndex(index);

            settings.SetDefaultTypeNameInferrer(type => type.FullName.Replace("Demo.Application.ServiceStack.", "").Replace('.', '_'));
            // Disable camel case field names (need to match out POCO field names)
            settings.SetDefaultPropertyNameInferrer(field => field);

            var client = new ElasticClient(settings);

            if (!client.IndexExists(index).Exists)
            {
                client.CreateIndex(index, i => i
                                   .Analysis(analysis => analysis
                                             .TokenFilters(f => f
                                                           .Add("ngram", new Nest.NgramTokenFilter {
                    MinGram = 2, MaxGram = 15
                })
                                                           )
                                             .Analyzers(a => a
                                                        .Add(
                                                            "default_index",
                                                            new Nest.CustomAnalyzer
                {
                    Tokenizer = "standard",
                    Filter    = new[] { "standard", "lowercase", "asciifolding", "kstem", "ngram" }
                }
                                                            )
                                                        .Add(
                                                            "suffix",
                                                            new Nest.CustomAnalyzer
                {
                    Tokenizer = "keyword",
                    Filter    = new[] { "standard", "lowercase", "asciifolding", "reverse" }
                }
                                                            )
                                                        )
                                             ));
            }

            return(client);
        }