Официальный сайт ElasticSearch:
woohoo.elastic.co/expensive/en/bad…
- Эластичный -> начало
- Эластичный -> Знать
- Эластичность -> создание базы данных и таблиц
- Эластичность -> Запрос данных
Установить
Elastic
необходимостьJava 8
окрестности. Пожалуйста, обратитесь кэта статьяЧтобы установить Java, вы можете решить проблему настройки среды!
установленJava 8
После этого введите следующую команду в терминал для загрузкиElastic
почтовый индекс (Пожалуйста, измените номер версии самостоятельно).
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip
$ unzip elasticsearch-5.5.1.zip
$ cd elasticsearch-5.5.1/
запускать
во всех приготовлениях(Java
После завершения установки введитеElastic
В корневом каталоге файла введите следующую команду для запускаElastic
.
$ ./bin/elasticsearch
После завершения запуска откройте браузер и введите в адресную строкуlocalhost:9200
, если появится сообщение, похожее на следующее, запуск выполнен успешно.
{
"name" : "atntrTf",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "tf9250XhQ6ee4h7YI11anA",
"version" : {
"number" : "5.5.1",
"build_hash" : "19c13d0",
"build_date" : "2017-07-18T20:44:24.823Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
P.S. рекомендую одинAPI
инструмент запросаPostMan, который может заменить браузеры и терминалы для запускаAPI
запрос и может выполнять операции с возвращенными даннымиJSON
Преобразование формата, интуитивно понятный и лаконичный.
Базовые концепты
Node (узел) и Cluster (кластер)
Elastic
По сути, это распределенная база данных, которая позволяет нескольким серверам работать вместе, в то время как каждый сервер может запускать несколькоElastic
пример. каждыйElastic
Экземпляр называется узлом, а группа узлов называется кластером.
Показатель
Elastic
серединаIndex
(индекс) эквивалентен реляционной базе данныхdataBase
(база данных), конечно, можно понимать и какtable
(поверхность). каждыйIndex
Имя должно быть в нижнем регистре. Следующая команда может просмотреть текущийElastic
все под экземплярIndex
, в том числе каждыйIndex
размер документа и т.д.
$ curl -X GET 'http://localhost:9200/_cat/indices?v'
Конечно, вы также можете использовать вышеупомянутыеPostMan
Введите адрес маршрутизации в приведенной выше команде для просмотра.
Документ
Index
Каждая запись данных в называетсяDocument
(документация). много строкDocument
представляет собойIndex
. такIndex
Его можно рассматривать как стол, когда он маленький.Document
Структура данных вJSON
формат указан.
{
"auth": "Assassin",
"work": "NodeJS全栈",
"email": "告诉你才怪@qq.com",
}
Тип (категория)
Index
Если это рассматривается как база данных, тоType
Его можно рассматривать как таблицу этой базы данных. Обратите внимание, что то же самоеIndex
внизType
должна иметь аналогичную структуру (schema
), что отличается от реляционных баз данных. Следующая команда выводит список текущихIndex
все подType
.
$ curl 'localhost:9200/_mapping?pretty=true'
Еще одно слово,
ES
Сравнение с различными элементами реляционных баз данных:
Relational DB | Database | Table | Row | Colum |
---|---|---|---|---|
ElasticSearch | Index | Type | Document | Field |
Типы данных в Elastic
Здесь перечислены только часто используемые типы данных, а остальные будут обсуждаться позже.
-
String: Тип строки, который будет сегментирован по умолчанию. который включает
keyword
иtext
два подтипа.ключевое слово: при хранении данные не будут индексироваться с помощью сегментации слов и могут использоваться для извлечения, фильтрации, сортировки и агрегирования. Например: «Стальная конструкция стены»,
keyword
возьму в целом.текст: при сохранении данных данные будут проиндексированы по словесной сегментации, но если данные в этом поле не нуждаются в словесной сегментации, используйте
text
будет тратить место для хранения.text
Типы данных нельзя использовать для сортировки и агрегирования. Например: «Стальная конструкция стены»,text
Он будет разделен на «стену», «стальную конструкцию».Токенизатор: только для
text
тип.git
адресGitHub.com/many out/E последний…. Его функция заключается в сегментации текста по определенным правилам. Способ установки: Разархивируйте загруженный плагин сегментации слов в корневой каталог.plugins
, затем перезапуститеElastic
пример. -
Тип номера:
- long: длинное целое, 64-битное хранилище
- целое число: целое число, 32-битное хранилище
- short: короткое целое, 16-битное хранилище
- байт: тип байта, 8-битное хранилище
- double: двойная точность, 64-битное хранилище
- float: тип одинарной точности, 32-битное хранилище
-
другие простые типы
- дата: тип времени
- boolean: логический тип
- двоичный: байтовый тип
-
составной тип
- массив: тип массива
- объект: тип объекта json
- Array[Object]: вложенный тип массива объектов
Создание отображения индекса
Index
Создание включений для каждой таблицыType
Определение. существуетJavaScript
и метод создания в терминале выглядит следующим образом:
- JavaScript
import elasticsearch from 'elasticsearch';
const esClient = new elasticsearch.Client({
host: 'localhost:9200',
log: 'error',
});
const settings = {
number_of_shards: 5,
number_of_replicas: 1,
};
const PromiseList = [
esClient.indices.create({
index: 'student',
body: {
settings, // index的一些设置
mappings: {
// type
person: {
// type 的各个字段
properties: {
sno: {
type: 'long',
},
name: {
type: 'keyword',
},
sex: {
type: 'keyword',
},
class: {
type: 'text',
analyzer: 'ik_max_word',
search_analyzer: 'ik_max_word',
fields: {
raw: {
type: 'keyword',
ignore_above: 128,
},
},
},
register: {
type: 'date',
},
},
},
.....
},
},
}),
.....
];
PromiseList.map(p => p.catch(e => console.log(e.message)));
.....
В приведенном выше коде с помощью
Promises
Для пакетного создания баз данных, если вы создаете только одну библиотеку, вы можете использоватьasync await
.
- Терминал
$ curl -X PUT -H 'Content-Type: application/json' 'localhost:9200/student' -d '
{
mappings: {
// type
person: {
// type 的各个字段
properties: {
sno: {
type: 'long',
},
name: {
type: 'keyword',
},
sex: {
type: 'keyword',
},
class: {
type: 'text',
analyzer: 'ik_max_word',
search_analyzer: 'ik_max_word',
fields: {
raw: {
type: 'keyword',
ignore_above: 128,
},
},
},
register: {
type: 'date',
},
},
},
},
}'
В приведенном выше коде файл с именемstudent
изIndex
, в том числеperson
Таблица содержит четыре поля:son
,name
,sex
,register
.
Удаление индекса
После разговора о создании пришло время удалить его. Удалить легко:
- JavaScript
import elasticsearch from 'elasticsearch';
const esClient = new elasticsearch.Client({
host: 'localhost:9200',
log: 'error',
});
Promise.all(
[
'student',
.....
].map(index =>
esClient.indices
.delete({ index })
.catch(() => console.error(`delete fail: ${index}`))
)
);
В приведенном выше коде с помощью
Promises
Чтобы удалить базы данных в пакетах, если вы удаляете только одну базу данных, вы можете использоватьasync await
.
- Терминал
$ curl -X DELETE 'localhost:9200/student'
Эластичный запрос данных
Elastic
Часто используемые методы запросов в
поиск, получение, подсчет, mget, msearch и т. д.
конфигурационный файл
import elasticSearch from 'elasticsearch';
let _client = null;
export default () => {
if (!_client) {
_client = new elasticSearch.Client('localhost:9200');
}
return _client;
};
Условный запрос для одной записи
Структура запроса условного запроса для одноручных записей аналогичнаJSON
Объект
{
index: database_name,
type: table_name,
body: {
query: {
bool: {
filter: {
term: {
'field_name': value,
},
},
},
},
},
}
Это простейшая структура запроса
средиfilter
Стоимость свойстваObject | Array
, вArray
представляет собой массив объектов. как[{term: {key: value}}, ...]
.
Конечно, запрос не может быть таким простым, есть и другие свойства, которые можно добавить.
запрос фильтра терминов и терминов (запрос соответствия)
term
В основном используется для точного соответствия значениям, таким как числа, даты, логические значения. Одинterm
Структура запроса:
{ term: { key: value } }
похожий наterms
В основном используется для фильтрации запросов, соответствующих нескольким условиям. Например
{ terms: 'tag': [ 'react', 'vue', 'angular' ] }
запрос фильтра диапазона (запрос диапазона)
range
Фильтрация позволяет найти пакет данных по заданному диапазону
{
range: {
age: {
gte: 18,
lt: 28,
}
}
}
Ключевые слова с ограниченной областью действия:
-
gt: больше, чем
-
gte: больше или равно
-
л: меньше чем
-
lte: меньше или равно
Отражено в структуре запроса:
{
index: database_name,
type: table_name,
body: {
query: {
range: {
age: {
gte: 18,
lt: 28,
}
}
},
}
range
иterm(s)
Он принадлежит к тому же уровню атрибутов, поэтому его можно использовать какfilter
значение свойства массива
существует и отсутствует фильтр
exists & missing
Используется для определения того, существует или нет указанное поле в записи.
{
exists: {
field: 'field_value'
}
}
exists & missing
иterm(s)
Он принадлежит к тому же уровню атрибутов, поэтому его можно использовать какfilter
значение свойства массива
логический фильтр
bool
Булев логический запрос, включая ключевые слова:
-
должен: эквивалентно и
-
must_not: эквивалентно not
-
следует: эквивалентно или
Использование простое, просто заменитеfilter
, конечно, сfilter
То же использование.
совокупный запрос
Для этой части будут некоторые различия в понимании языкового описания. В конце концов, агрегация все еще относительно велика, поэтому я бы порекомендовал Du Niang, чтобы быть более профессиональным (я сделаю резюме, когда немного подрасту!!)
Пакетный условный запрос
Пакетный условный запрос — это процесс запроса, который последовательно обрабатывает набор различных наборов условий запроса, как и пакетный процесс.
пакетный условный запрос msearch
msearch
Он заключается в том, чтобы поместить структуру общего условного запроса в массив, а затем использовать массив в качестве структуры запроса.
{
body: [
{ index: database_1, type: table_1 },
{
query: {
term: { field: value },
},
},
{ index: database_2, type: table_2 },
{
query: {
bool: {
must: {
term: {
field: value,
},
},
filter: [
{ term: { field: value } },
{ term: { field: value } },
],
},
},
},
}
Как видно из приведенной выше структуры,msearch
Структура запроса представляет собой структуру массива, начинающуюся с нижнего индекса 0, с двумя соседними элементами в виде единой структуры запроса.
Запрос идентификатора пакета mget
Этот метод подходит для пакетных запросов, когда известно несколько идентификаторов записей.
{
index: database,
type: table,
body: {
ids,
},
}
вids
представляет собой массив.
Искусство /Убийца это я
Добро пожаловать, чтобы следовать за автором~
редактировать /флуоресценция
Эта статья была опубликована с разрешения автора, и авторские права принадлежат автору.
Если вы хотите подписаться на другие сообщения с передовой линии KnownsecFED, выполните поиск и подпишитесь на нашу общедоступную учетную запись WeChat: KnownsecFED. Добро пожаловать, чтобы оставить сообщение для обсуждения, мы ответим как можно скорее.
Спасибо за чтение.