Пример #1
0
        public void SerializeBlocksAnalyzer()
        {
            const string targetJson = "\"analysis\":{\"analyzer\":{\"blocks_analyzer\":{\"type\":\"custom\",\"tokenizer\":\"whitespace\",\"filter\":[\"lowercase\",\"blocks_filter\",\"shingle\"]}}}";
            var          analysis   = new Analysis
            {
                Analyzer =
                {
                    Analyzers         = new List <AnalyzerBase>
                    {
                        new CustomAnalyzer("blocks_analyzer")
                        {
                            Tokenizer = DefaultTokenizers.Whitespace,
                            Filter    = new List <string> {
                                "lowercase", "blocks_filter", "shingle"
                            }
                        },
                    }
                }
            };

            var jsonWriter = new ElasticsearchCrudJsonWriter();

            analysis.WriteJson(jsonWriter);
            var result = jsonWriter.GetJsonString();

            Console.WriteLine(result);
            Assert.Equal(targetJson, result);
        }
Пример #2
0
        public override string ToString()
        {
            var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();

            WriteJson(elasticsearchCrudJsonWriter);
            return(elasticsearchCrudJsonWriter.GetJsonString());
        }
Пример #3
0
        public void SerializeAnalyzerWithAsciifoldingFilter()
        {
            const string targetJson =
                "\"analysis\":{\"filter\":{\"my_ascii_folding\":{\"type\":\"asciifolding\",\"preserve_original\":true}},\"analyzer\":{\"default\":{\"type\":\"custom\",\"tokenizer\":\"standard\",\"filter\":[\"standard\",\"my_ascii_folding\"]}}}";

            var analysis = new Analysis
            {
                Analyzer =
                {
                    Analyzers = new List<AnalyzerBase>
                    {
                        new CustomAnalyzer("default")
                        {
                            Tokenizer = DefaultTokenizers.Standard,
                            Filter = new List<string> {"standard", "my_ascii_folding"}
                        }
                    }
                },
                Filters =
                {
                    CustomFilters = new List<AnalysisFilterBase> {new AsciifoldingTokenFilter("my_ascii_folding") {PreserveOriginal = true}}
                }
            };

            var jsonWriter = new ElasticsearchCrudJsonWriter();
            analysis.WriteJson(jsonWriter);
            var result = jsonWriter.GetJsonString();
            Console.WriteLine(result);
            Assert.AreEqual(targetJson, result);
        }
Пример #4
0
        public void CreateIndexSettingsAndMappingsForDocument(string index,
                                                              IndexSettings indexSettings,
                                                              IndexAliases indexAliases,
                                                              IndexWarmers indexWarmers,
                                                              EntityContextInfo entityInfo,
                                                              MappingDefinition mappingDefinition)
        {
            if (_processedItems.Contains("_index" + index))
            {
                return;
            }
            _processedItems.Add("_index" + index);
            var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();

            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
            CreateIndexSettings(elasticsearchCrudJsonWriter, indexSettings);
            indexAliases.WriteJson(elasticsearchCrudJsonWriter);
            indexWarmers.WriteJson(elasticsearchCrudJsonWriter);

            IndexSettingsCreatePropertyMappingForTopDocument(entityInfo, mappingDefinition, elasticsearchCrudJsonWriter);

            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();

            CreateIndexCommand(elasticsearchCrudJsonWriter.GetJsonString(), index);
        }
Пример #5
0
        public void UpdateSettings(string index, IndexUpdateSettings indexUpdateSettings)
        {
            var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();

            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
            elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName("index");
            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
            indexUpdateSettings.WriteJson(elasticsearchCrudJsonWriter);
            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();

            SettingsCommand(elasticsearchCrudJsonWriter.GetJsonString(), index);
        }
Пример #6
0
        /// <summary>
        /// Create a new mapping for the child type in the parent document index
        /// </summary>
        /// <param name="entityInfo"></param>
        /// <param name="elasticsearchMapping"></param>
        /// <param name="item"></param>
        /// <param name="mappingDefinition">definition for the type mappings</param>
        private void CreatePropertyMappingForChildDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping, EntityContextInfo item, MappingDefinition mappingDefinition)
        {
            var childMapping =
                _elasticsearchSerializerConfiguration.ElasticsearchMappingResolver.GetElasticSearchMapping(item.EntityType);

            var parentMapping =
                _elasticsearchSerializerConfiguration.ElasticsearchMappingResolver.GetElasticSearchMapping(item.ParentEntityType);

            var childType  = childMapping.GetDocumentType(item.EntityType);
            var parentType = parentMapping.GetDocumentType(item.ParentEntityType);

            var processedId = childType + "_" + parentType;

            if (_processedItems.Contains(childType))
            {
                var test = CommandTypes.Find(t => t.StartsWith(childType));
                if (test != processedId)
                {
                    throw new ElasticsearchCrudException("InitMappings: Not supported, child documents can only have one parent");
                }
                return;
            }
            _processedItems.Add(childType);
            CommandTypes.Add(processedId);

            var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();

            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName(childType);
            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            mappingDefinition.Source.WriteJson(elasticsearchCrudJsonWriter);
            mappingDefinition.All.WriteJson(elasticsearchCrudJsonWriter);
            mappingDefinition.Analyzer.WriteJson(elasticsearchCrudJsonWriter);

            CreateParentMappingForDocument(
                elasticsearchCrudJsonWriter,
                elasticsearchMapping.GetDocumentType(item.ParentEntityType));

            if (item.RoutingDefinition.RoutingId != null && _elasticsearchSerializerConfiguration.UserDefinedRouting)
            {
                CreateForceRoutingMappingForDocument(elasticsearchCrudJsonWriter);
            }

            ProccessPropertyMappingsWithoutTypeName(elasticsearchCrudJsonWriter, item, childMapping);
            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            CreateMappingCommandForTypeWithExistingIndex(elasticsearchCrudJsonWriter.GetJsonString(), elasticsearchMapping.GetIndexForType(entityInfo.EntityType), childMapping.GetDocumentType(item.EntityType));
        }
Пример #7
0
        public void CreateIndexSettingsForDocument(string index, IndexSettings indexSettings, IndexAliases indexAliases)
        {
            if (_processedItems.Contains("_index" + index))
            {
                return;
            }
            _processedItems.Add("_index" + index);
            var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();

            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
            CreateIndexSettings(elasticsearchCrudJsonWriter, indexSettings);
            indexAliases.WriteJson(elasticsearchCrudJsonWriter);
            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();

            CreateIndexCommand(elasticsearchCrudJsonWriter.GetJsonString(), index);
        }
Пример #8
0
        public void SerializeAnalyzerWithNGramTokenizer()
        {
            const string targetJson =
                "\"analysis\":{\"tokenizer\":{\"my_ngram_tokenizer\":{\"type\":\"nGram\",\"min_gram\":1,\"max_gram\":5,\"token_chars\":[\"digit\",\"letter\"]}},\"analyzer\":{\"default\":{\"type\":\"custom\",\"tokenizer\":\"my_ngram_tokenizer\"}}}";

            var analysis = new Analysis
            {
                Analyzer =
                {
                    Analyzers         = new List <AnalyzerBase>
                    {
                        new CustomAnalyzer("default")
                        {
                            Tokenizer = "my_ngram_tokenizer"
                        }
                    }
                },
                Tokenizers =
                {
                    CustomTokenizers   = new List <AnalysisTokenizerBase>
                    {
                        new NGramTokenizer("my_ngram_tokenizer")
                        {
                            MaxGram    = 5,
                            MinGram    = 1,
                            TokenChars = new List <TokenChar> {
                                TokenChar.digit, TokenChar.letter
                            }
                        }
                    }
                }
            };

            var jsonWriter = new ElasticsearchCrudJsonWriter();

            analysis.WriteJson(jsonWriter);
            var result = jsonWriter.GetJsonString();

            Console.WriteLine(result);
            Assert.Equal(targetJson, result);
        }
Пример #9
0
        /// <summary>
        /// Create a new index for the parent document
        /// </summary>
        /// <param name="entityInfo"></param>
        /// <param name="elasticsearchMapping"></param>
        /// <param name="mappingDefinition">mapping definitions for the index type</param>
        private void CreatePropertyMappingForEntityForParentDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping, MappingDefinition mappingDefinition)
        {
            var itemType = elasticsearchMapping.GetDocumentType(entityInfo.EntityType);

            if (_processedItems.Contains("_mapping" + itemType))
            {
                return;
            }
            _processedItems.Add("_mapping" + itemType);

            var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();

            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
            elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName(itemType);
            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            mappingDefinition.Source.WriteJson(elasticsearchCrudJsonWriter);
            mappingDefinition.All.WriteJson(elasticsearchCrudJsonWriter);
            mappingDefinition.Analyzer.WriteJson(elasticsearchCrudJsonWriter);

            if (entityInfo.RoutingDefinition.RoutingId != null && _elasticsearchSerializerConfiguration.UserDefinedRouting)
            {
                CreateForceRoutingMappingForDocument(elasticsearchCrudJsonWriter);
            }

            if (entityInfo.RoutingDefinition.ParentId != null)
            {
                CreateParentMappingForDocument(
                    elasticsearchCrudJsonWriter,
                    elasticsearchMapping.GetDocumentType(entityInfo.ParentEntityType));
            }

            ProccessPropertyMappingsWithoutTypeName(elasticsearchCrudJsonWriter, entityInfo, elasticsearchMapping);

            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();

            CreateMappingCommandForTypeWithExistingIndex(elasticsearchCrudJsonWriter.GetJsonString(), mappingDefinition.Index, itemType);
        }
Пример #10
0
        public void SerializeAnalyzerWithAsciifoldingFilter()
        {
            const string targetJson =
                "\"analysis\":{\"filter\":{\"my_ascii_folding\":{\"type\":\"asciifolding\",\"preserve_original\":true}},\"analyzer\":{\"default\":{\"type\":\"custom\",\"tokenizer\":\"standard\",\"filter\":[\"standard\",\"my_ascii_folding\"]}}}";

            var analysis = new Analysis
            {
                Analyzer =
                {
                    Analyzers         = new List <AnalyzerBase>
                    {
                        new CustomAnalyzer("default")
                        {
                            Tokenizer = DefaultTokenizers.Standard,
                            Filter    = new List <string> {
                                "standard", "my_ascii_folding"
                            }
                        }
                    }
                },
                Filters =
                {
                    CustomFilters            = new List <AnalysisFilterBase> {
                        new AsciifoldingTokenFilter("my_ascii_folding")
                        {
                            PreserveOriginal = true
                        }
                    }
                }
            };

            var jsonWriter = new ElasticsearchCrudJsonWriter();

            analysis.WriteJson(jsonWriter);
            var result = jsonWriter.GetJsonString();

            Console.WriteLine(result);
            Assert.Equal(targetJson, result);
        }
Пример #11
0
        public void SerializeAnalyzerWithStandardTokenizer()
        {
            const string targetJson =
                "\"analysis\":{\"tokenizer\":{\"bigger_limit_token_count\":{\"type\":\"standard\",\"max_token_length\":360}},\"analyzer\":{\"default\":{\"type\":\"custom\",\"tokenizer\":\"bigger_limit_token_count\"}}}";

            var analysis = new Analysis
            {
                Analyzer =
                {
                    Analyzers         = new List <AnalyzerBase>
                    {
                        new CustomAnalyzer("default")
                        {
                            Tokenizer = "bigger_limit_token_count"
                        }
                    }
                },
                Tokenizers =
                {
                    CustomTokenizers       = new List <AnalysisTokenizerBase>
                    {
                        new StandardTokenizer("bigger_limit_token_count")
                        {
                            MaxTokenLength = 360
                        }
                    }
                }
            };

            var jsonWriter = new ElasticsearchCrudJsonWriter();

            analysis.WriteJson(jsonWriter);
            var result = jsonWriter.GetJsonString();

            Console.WriteLine(result);
            Assert.Equal(targetJson, result);
        }
Пример #12
0
        public void SerializeAnalyzerWithStandardTokenizer()
        {
            const string targetJson =
                "\"analysis\":{\"tokenizer\":{\"bigger_limit_token_count\":{\"type\":\"standard\",\"max_token_length\":360}},\"analyzer\":{\"default\":{\"type\":\"custom\",\"tokenizer\":\"bigger_limit_token_count\"}}}";

            var analysis = new Analysis
            {
                Analyzer =
                {
                    Analyzers = new List<AnalyzerBase>
                    {
                        new CustomAnalyzer("default")
                        {
                            Tokenizer = "bigger_limit_token_count"
                        }
                    }
                },
                Tokenizers =
                {
                    CustomTokenizers = new List<AnalysisTokenizerBase>
                    {
                        new StandardTokenizer("bigger_limit_token_count") {MaxTokenLength = 360}
                    }
                }
            };

            var jsonWriter = new ElasticsearchCrudJsonWriter();
            analysis.WriteJson(jsonWriter);
            var result = jsonWriter.GetJsonString();
            Console.WriteLine(result);
            Assert.AreEqual(targetJson, result);
        }
Пример #13
0
        public void SerializeAnalyzerWithEdgeNGramTokenizer()
        {
            const string targetJson =
                "\"analysis\":{\"tokenizer\":{\"my_edgengram_tokenizer\":{\"type\":\"edgeNGram\",\"min_gram\":2,\"max_gram\":4,\"token_chars\":[\"digit\",\"letter\"]}},\"analyzer\":{\"default\":{\"type\":\"custom\",\"tokenizer\":\"my_edgengram_tokenizer\"}}}";

            var analysis = new Analysis
            {
                Analyzer =
                {
                    Analyzers = new List<AnalyzerBase>
                    {
                        new CustomAnalyzer("default")
                        {
                            Tokenizer = "my_edgengram_tokenizer"
                        }
                    }
                },
                Tokenizers =
                {
                    CustomTokenizers = new List<AnalysisTokenizerBase>
                    {
                        new EdgeNGramTokenizer("my_edgengram_tokenizer")
                        {
                            MaxGram = 4,
                            MinGram = 2,
                            TokenChars = new List<TokenChar> {TokenChar.digit, TokenChar.letter}
                        }
                    }
                }
            };

            var jsonWriter = new ElasticsearchCrudJsonWriter();
            analysis.WriteJson(jsonWriter);
            var result = jsonWriter.GetJsonString();
            Console.WriteLine(result);
            Assert.AreEqual(targetJson, result);
        }
Пример #14
0
		public void UpdateSettings(string index, IndexUpdateSettings indexUpdateSettings)
		{
			var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();
			elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
			elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName("index");
			elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
			indexUpdateSettings.WriteJson(elasticsearchCrudJsonWriter);
			elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
			elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();

			SettingsCommand(elasticsearchCrudJsonWriter.GetJsonString(), index);
		}
Пример #15
0
		/// <summary>
		/// Create a new index for the parent document
		/// </summary>
		/// <param name="entityInfo"></param>
		/// <param name="elasticsearchMapping"></param>
		/// <param name="mappingDefinition">mapping definitions for the index type</param>
		private void CreatePropertyMappingForEntityForParentDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping, MappingDefinition mappingDefinition)
		{
			var itemType = elasticsearchMapping.GetDocumentType(entityInfo.EntityType);
			if (_processedItems.Contains("_mapping" +itemType))
			{
				return;
			}
			_processedItems.Add("_mapping" +itemType);

			var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();
			elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
			elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName(itemType);
			elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

			mappingDefinition.Source.WriteJson(elasticsearchCrudJsonWriter);
			mappingDefinition.All.WriteJson(elasticsearchCrudJsonWriter);
			mappingDefinition.Analyzer.WriteJson(elasticsearchCrudJsonWriter);

			if (entityInfo.RoutingDefinition.RoutingId != null && _elasticsearchSerializerConfiguration.UserDefinedRouting)
			{
				CreateForceRoutingMappingForDocument(elasticsearchCrudJsonWriter);
			}

			if (entityInfo.RoutingDefinition.ParentId != null)
			{
				CreateParentMappingForDocument(
				elasticsearchCrudJsonWriter,
				elasticsearchMapping.GetDocumentType(entityInfo.ParentEntityType));
			}

			ProccessPropertyMappingsWithoutTypeName(elasticsearchCrudJsonWriter, entityInfo, elasticsearchMapping);

			elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
			elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();

			CreateMappingCommandForTypeWithExistingIndex(elasticsearchCrudJsonWriter.GetJsonString(), mappingDefinition.Index, itemType);
		
		}
Пример #16
0
 public override string ToString()
 {
     var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();
     WriteJson(elasticsearchCrudJsonWriter);
     return elasticsearchCrudJsonWriter.GetJsonString();
 }
Пример #17
0
        public void SerializeBlocksAnalyzer()
        {
            const string targetJson = "\"analysis\":{\"analyzer\":{\"blocks_analyzer\":{\"type\":\"custom\",\"tokenizer\":\"whitespace\",\"filter\":[\"lowercase\",\"blocks_filter\",\"shingle\"]}}}";
            var analysis = new Analysis
            {
                Analyzer =
                {
                    Analyzers = new List<AnalyzerBase>
                    {
                        new CustomAnalyzer("blocks_analyzer")
                        {
                            Tokenizer = DefaultTokenizers.Whitespace,
                            Filter = new List<string> {"lowercase", "blocks_filter", "shingle"}
                        },

                    }
                }
            };

            var jsonWriter = new ElasticsearchCrudJsonWriter();
            analysis.WriteJson(jsonWriter);
            var result = jsonWriter.GetJsonString();
            Console.WriteLine(result);
            Assert.AreEqual(targetJson,result);
        }
Пример #18
0
		/// <summary>
		/// Create a new mapping for the child type in the parent document index
		/// </summary>
		/// <param name="entityInfo"></param>
		/// <param name="elasticsearchMapping"></param>
		/// <param name="item"></param>
		/// <param name="mappingDefinition">definition for the type mappings</param>
		private void CreatePropertyMappingForChildDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping, EntityContextInfo item, MappingDefinition mappingDefinition)
		{
			var childMapping =
				_elasticsearchSerializerConfiguration.ElasticsearchMappingResolver.GetElasticSearchMapping(item.EntityType);

			var parentMapping =
				_elasticsearchSerializerConfiguration.ElasticsearchMappingResolver.GetElasticSearchMapping(item.ParentEntityType);

			var childType = childMapping.GetDocumentType(item.EntityType);
			var parentType = parentMapping.GetDocumentType(item.ParentEntityType);

			var processedId = childType + "_" + parentType;
			if (_processedItems.Contains(childType))
			{
				var test = CommandTypes.Find(t => t.StartsWith(childType));
				if (test != processedId)
				{
					throw new ElasticsearchCrudException("InitMappings: Not supported, child documents can only have one parent");
				}
				return;
			}
			_processedItems.Add(childType);
			CommandTypes.Add(processedId);

			var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();
			elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

			elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName(childType);
			elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

			mappingDefinition.Source.WriteJson(elasticsearchCrudJsonWriter);
			mappingDefinition.All.WriteJson(elasticsearchCrudJsonWriter);
			mappingDefinition.Analyzer.WriteJson(elasticsearchCrudJsonWriter);

			CreateParentMappingForDocument(
				elasticsearchCrudJsonWriter,
				elasticsearchMapping.GetDocumentType(item.ParentEntityType));

			if (item.RoutingDefinition.RoutingId != null && _elasticsearchSerializerConfiguration.UserDefinedRouting)
			{
				CreateForceRoutingMappingForDocument(elasticsearchCrudJsonWriter);
			}

			ProccessPropertyMappingsWithoutTypeName(elasticsearchCrudJsonWriter, item, childMapping);
			elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
			elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
			CreateMappingCommandForTypeWithExistingIndex(elasticsearchCrudJsonWriter.GetJsonString(), elasticsearchMapping.GetIndexForType(entityInfo.EntityType), childMapping.GetDocumentType(item.EntityType));
		}
Пример #19
0
		public void CreateIndexSettingsForDocument(string index, IndexSettings indexSettings, IndexAliases indexAliases, IndexWarmers indexWarmers)
		{
			if (_processedItems.Contains("_index" + index))
			{
				return;
			}
			_processedItems.Add("_index" + index);
			var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();
			elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
			CreateIndexSettings(elasticsearchCrudJsonWriter, indexSettings);
			indexAliases.WriteJson(elasticsearchCrudJsonWriter);
			indexWarmers.WriteJson(elasticsearchCrudJsonWriter);
			elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();

			CreateIndexCommand(elasticsearchCrudJsonWriter.GetJsonString(), index);
		}