Подробное объяснение конфигурации сопоставления индекса Elasticsearch.

задняя часть база данных SQL Elasticsearch
Подробное объяснение конфигурации сопоставления индекса Elasticsearch.

Обзор

Очевидная разница между Elasticsearch и традиционными базами данных SQL заключается в том, что Elasticsearch — этоНеструктурированныйбаза данных илинемодальныйбаза данных. Три наиболее важных элемента данных в Elasticsearch:показатель,Типы,Документация, концепция индексации очень важна, мы можем грубо сравнить ее с традиционной базой данных SQL.техническая спецификация. Эта статья начинается с того, как настроить отображение индекса Elasticsearch.

Примечание:Эта статья была впервые опубликована вMy Personal Blog,Добро пожаловатьмаленькая станция!

В этой статье мозг выглядит следующим образом: Статья составляет 1540 слов, чтение этой статьи занимает около 5 минут!

本文内容脑图



отображение шаблона индекса

При создании индекса можно настроить структуру индекса, например, создать индекс, в котором хранятся данные о пользователях.usersИндекс, его типичная структура выглядит следующим образом:

  • id: уникальный идентификатор
  • name:Имя
  • birthday:Дата рождения
  • hobby:Хобби

Для этого мы можем создать файл отображения шаблона индекса в формате json:users.json

{
	"mappings" : {
		"user" : {
			"properties" : {
				"id" : {
					"type" : "long",
					"store" : "yes"
				},
				"name" : {
					"type" : "string",
					"store" : "yes",
					"index" : "analyzed"
				},
				"birthday" : {
					"type" : "date",
					"store" : "yes"
				},
				"hobby" : {
					"type" : "string",
					"store" : "no",
					"index" : "analyzed"
				}
				
			}
		}
	}
}

Смысл приведенного выше json-кода следующий:

  • Создайте именованныйusersизIndex
  • Есть имя, называемоеuserизType
  • а такжеuserЕсть четыреfield
  • И каждое поле имеет своеАтрибутыопределение

Затем мы выполняем следующую команду для создания нового индекса:

curl -X PUT http://47.98.43.236:9200/users -d @users.json

Результат следующий, индексusers,Типыuser, и четыре поля были успешно вставлены:

新建一个索引

о поленеобязательный тип, есть следующие:

  • string: нить
  • number:количество
  • date:Дата
  • boolean: логическое значение
  • binary: двоичный
  • ip: Айпи адрес
  • token_countТипы

Как насчет каждого типаАтрибуты, вы можете обратиться к официальной документации, поскольку содержания слишком много, я не буду повторять их здесь.



Использование анализаторов

Анализатор – этоанализировать данныеили как хочет пользовательОбработка данныхинструменты дляТип строкиполей, Elasticsearch позволяет пользователям настраивать анализаторы.

  • Сначала настроим анализатор
{
  "settings" : {
    "index" : {
      "analysis" : {
        "analyzer" : {
          "myanalyzer" : {
            "tokenizer" : "standard",
            "filter" : [
              "asciifolding",
              "lowercase",
              "myFilter"
            ]
          }
        },
        "filter" : {
          "myFilter" : {
            "type" : "kstem"
          }
        }
      }

    }
  },
	"mappings" : {
		"user" : {
			"properties" : {
				"id" : {
					"type" : "long",
					"store" : "yes"
				},
				"name" : {
					"type" : "string",
					"store" : "yes",
					"index" : "analyzed",
                    "analyzer" : "myanalyzer"
				},
				"birthday" : {
					"type" : "date",
					"store" : "yes"
				},
				"hobby" : {
					"type" : "string",
					"store" : "no",
					"index" : "analyzed"
				}

			}
		}
	}
}

В приведенном выше коде json пользователь определяетmyanalyzerАнализатор, содержащийОдин токенизатор + три фильтрасоответственно следующим образом:

  1. Токенизатор:standard
  2. фильтр:asciifolding
  3. фильтр:lowercase
  4. фильтр:myFilter(настраиваемый фильтр, который по сутиkstem)
  • Давайте посмотрим, как тестировать и использовать собственные анализаторы

Работу API анализа можно протестировать через интерфейс Restful, подобный следующему:

curl -X GET 'http://47.98.43.236:9200/users/_analyze?field=user.name' -d 'Cars Trains'

Видно, что строка строк нормальна, когда мы вводим"Cars Trains", а вывод:carа такжеtrain, который иллюстрирует фразу"Cars Trains"Он был разделен на две записи, затем все они были преобразованы в нижний регистр, и, наконец, была сделана операция стемминга, которая доказала, что наш пользовательский анализатор выше уже вступил в силу!



Конфигурация модели подобия

Elasticsearch позволяет указывать разные поля для разных полей в файле отображения шаблона индекса.показатель сходстваРасчетная модель, использование выглядит следующим образом:

	"mappings" : {
		"user" : {
			"properties" : {
				"id" : {
					"type" : "long",
					"store" : "yes"
				},
				"name" : {
					"type" : "string",
					"store" : "yes",
					"index" : "analyzed",
                    "analyzer" : "myanalyzer",
                    "similarity" : "BM25"
				},
				"birthday" : {
					"type" : "date",
					"store" : "yes"
				},
				"hobby" : {
					"type" : "string",
					"store" : "no",
					"index" : "analyzed"
				}

			}
		}
	}

В приведенном выше файле json мыnameполе используетсяBM25Эта модель подобия, метод добавления заключается в использованииsimilarityПара ключ-значение для свойства, поэтому ElasticsearchnameИспользование поляBM25Модель расчета сходства для расчета показателя сходства.



Настройка форматов сообщений

Elasticsearch поддерживает указание формата информации для каждого поля, чтобы соответствовать условиям повышения производительности за счет изменения способа индексации полей. Форматы информации в Elasticsearch следующие:

  • default: формат сообщения по умолчанию, обеспечивающий сжатие сохраненных полей и векторов слов в реальном времени.
  • pulsing: Кодировать информационный список поля с меньшим количеством повторяющихся значений в матрицу терминов, что может ускорить запрос этого поля.
  • direct: этот формат загружает записи в несжатую матрицу, хранящуюся в памяти во время процесса чтения.Этот формат может улучшить производительность часто используемых полей, но потребляет память
  • memory: этот формат записывает все данные на диск, а затем требует, чтобы FST считывал записи и списки сообщений в память.
  • bloom_default: расширение формата сообщения по умолчанию, добавляющееbloom filterФункция записи на диск. во время чтенияbloom filterсчитывается и сохраняется в памяти, чтобы быстро проверить, существует ли заданное значение
  • bloom_pulsing:pulsingрасширение формата, а также добавлениеbloom filterслужба поддержки

Поля формата информации (postings_format) допустимыйна любом полеДля выполнения настроек пример формата информации о конфигурации выглядит следующим образом:

	"mappings" : {
		"user" : {
			"properties" : {
				"id" : {
					"type" : "long",
					"store" : "yes",
                    "postings_format" : "pulsing"
				},
				"name" : {
					"type" : "string",
					"store" : "yes",
					"index" : "analyzed",
                    "analyzer" : "myanalyzer"
				},
				"birthday" : {
					"type" : "date",
					"store" : "yes"
				},
				"hobby" : {
					"type" : "string",
					"store" : "no",
					"index" : "analyzed"
				}

			}
		}
	} 

В этом примере мы вручную настраиваем изменениеidФормат информации поляpulsing, тем самым ускоряя запрос для этого поля.



Настройка значений документа и их форматов

значение документа это свойство поляэффект: что позволяет записывать значение данного поля в более эффективную с точки зрения памяти структуру для болееэффективныйизСортироватьа такжепоиск. Обычно мы можем добавить это свойство кнужно отсортироватьна поле, чтобыПовысить эффективность.

Его настройка осуществляется через свойстваdoc_values_formatЕсть три широко используемыхdoc_values_formatЗначение атрибута, его значение также можно догадаться от имени:

  • default: формат по умолчанию, который использует небольшой объем памяти, но хорошо работает
  • disk: сохраняет данные на диск практически без памяти
  • memory: хранить данные в памяти

Возьмите каштан:

	"mappings" : {
		"user" : {
			"properties" : {
				"id" : {
					"type" : "long",
					"store" : "yes"
				},
				"name" : {
					"type" : "string",
					"store" : "yes",
					"index" : "analyzed",
          "analyzer" : "myanalyzer"
				},
				"birthday" : {
					"type" : "date",
					"store" : "yes"
				},
				"hobby" : {
					"type" : "string",
					"store" : "no",
					"index" : "analyzed"
				},
                "age" : {
                    "type" : "integer",
                    "doc_values_format" : "memory"
                 }
			}
		}
	}

В приведенной выше конфигурации json мы указываем типuserдобавилageполе, если мы хотим сделатьСортировать, то установка свойства формата значения документа для поля может повысить эффективность.



Постскриптум

Из-за ограниченных возможностей, если есть ошибки или неуместность, пожалуйста, критикуйте и исправьте их, учитесь и обменивайтесь мнениями вместе!


Могунажиматьилисканированиепоследующийбудь остороженПодписатьсяCodeSheep, получить большеПрагматичный, понятный, воспроизводимыйИсходный текст ↓↓↓

CodeSheep · 程序羊