Обзор
Очевидная разница между 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Анализатор, содержащийОдин токенизатор + три фильтрасоответственно следующим образом:
- Токенизатор:
standard
- фильтр:
asciifolding
- фильтр:
lowercase
- фильтр:
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, получить большеПрагматичный, понятный, воспроизводимыйИсходный текст ↓↓↓