Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| system:elasticsearch [2017/08/27 23:46] – [Устанока] mirocow | system:elasticsearch [2019/07/15 19:12] (текущий) – [Примеры] mirocow | ||
|---|---|---|---|
| Строка 3: | Строка 3: | ||
| ====== Elasticsearch - поисковая система ====== | ====== Elasticsearch - поисковая система ====== | ||
| - | ===== Устанока ===== | + | ===== Документация |
| - | **nano ~/ | + | |
| - | <code bash> | + | |
| - | #!/usr/bin/sh | + | * https://www.elastic.co/guide/ |
| + | ===== Установка ===== | ||
| - | VERSION=5.5.2 | + | * [[: |
| + | * [[: | ||
| - | apt-get install openjdk-9-jdk | ||
| - | rm / | ||
| - | ln -s / | ||
| - | |||
| - | wget https:// | ||
| - | sudo dpkg -i elasticsearch-$VERSION.deb | ||
| - | |||
| - | # be sure you add " | ||
| - | |||
| - | # start script | ||
| - | sudo / | ||
| - | |||
| - | if [ -f / | ||
| - | rm / | ||
| - | fi | ||
| - | |||
| - | sudo ln -s / | ||
| - | |||
| - | # ------------------------------------------------------------------------------------ | ||
| - | |||
| - | # if you want to remove it: | ||
| - | #sudo dpkg -r elasticsearch | ||
| - | |||
| - | # binaries & plugin | ||
| - | #/ | ||
| - | |||
| - | # log dir | ||
| - | #/ | ||
| - | |||
| - | # data dir | ||
| - | #/ | ||
| - | |||
| - | # config dir | ||
| - | #/ | ||
| - | |||
| - | # prepare ElasticSearch UI | ||
| - | #sudo apt-get install apache2 | ||
| - | #sudo mkdir /var/www/ui | ||
| - | #sudo chown -R ubuntu.www-data /var/www | ||
| - | # now copy ES-HEAD to /var/www/ui | ||
| - | </ | ||
| ==== Установка и настройка Elasticsearch ==== | ==== Установка и настройка Elasticsearch ==== | ||
| Строка 67: | Строка 28: | ||
| <note important> | <note important> | ||
| - | [[https:// | + | nano /etc/ |
| - | + | < | |
| + | -Xms2g | ||
| + | -Xmx2g | ||
| + | </ | ||
| ===== Проверка работоспособности сервера ===== | ===== Проверка работоспособности сервера ===== | ||
| Строка 83: | Строка 46: | ||
| </ | </ | ||
| - | ===== Создание дампа / Dump create | + | ===== Статьи / Документация / Примеры индексов / Примеры запросов |
| - | * English: https:// | + | ==== Документация ==== |
| - | <note important> | + | === Уроки |
| - | nano /usr/local/etc/ | + | * [[https://codedzen.ru/elasticsearch-vvedeniye-1-1-osnovnyye-ponyatiya|Elasticsearch Введение — 1.1 Основные понятия]] |
| - | <code bash> | + | * [[https:// |
| - | path.repo: ["/usr/local/var/ | + | * [[https:// |
| - | </code> | + | * [[https:// |
| - | </note> | + | * [[https:// |
| + | * [[https://codedzen.ru/elasticsearch-urok-3-2-raznitsa-mezhdu-polnotekstov/ | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| - | ==== Регистрация ==== | + | === Статьи / Дискуссии === |
| + | * [[system: | ||
| + | * [[system: | ||
| + | * [[system: | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| - | <code bash> | ||
| - | $ curl -XPUT ' | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | }' | ||
| - | </ | ||
| - | * где: | ||
| - | * backup - название репозитория | ||
| - | * / | ||
| - | |||
| - | ==== Проверка регистрации ==== | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XGET " | ||
| - | </ | ||
| - | |||
| - | ответ от elasticsearch | ||
| - | <code json> | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ==== Проверка целостности ==== | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPOST " | ||
| - | </ | ||
| - | |||
| - | ответ от elasticsearch | ||
| - | <code json> | ||
| - | {" | ||
| - | </ | ||
| - | |||
| - | ==== Создание snapshot / Backup ==== | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPUT " | ||
| - | </ | ||
| - | |||
| - | Где my_index является существующим индексом. | ||
| - | |||
| - | Проверить наличие инднеса можно командой | ||
| - | <code bash> | ||
| - | $ curl --silent -XGET " | ||
| - | </ | ||
| - | |||
| - | ==== Удаление регистрации репозитория ==== | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XDELETE ' | ||
| - | </ | ||
| - | |||
| - | ===== Восстановление / Restore ===== | ||
| - | |||
| - | * English: https:// | ||
| - | |||
| - | |||
| - | ==== Настройка ==== | ||
| - | |||
| - | Если ранее небыл зарегистрирован. | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPUT ' | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | * где: | ||
| - | * backup - название репозитория | ||
| - | * / | ||
| - | |||
| - | ==== Проверка ==== | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPOST http:// | ||
| - | </ | ||
| - | |||
| - | ==== Восстановление ==== | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPOST http:// | ||
| - | </ | ||
| - | |||
| - | ===== Запрос поиска ===== | ||
| - | |||
| - | ==== Способы запроса ==== | ||
| - | |||
| - | * [[system: | ||
| - | |||
| - | === GET === | ||
| - | |||
| - | |||
| - | Вывод всех документов из индекса | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XGET ' | ||
| - | </ | ||
| - | |||
| - | === REST === | ||
| - | |||
| - | |||
| - | Вывод всех документов из индекса | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPOST ' | ||
| - | { | ||
| - | " | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | == Доступные параметры для REST запросов == | ||
| - | |||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPOST ' | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPOST ' | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | }' | ||
| - | |||
| - | $ curl -XPOST ' | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | }' | ||
| - | |||
| - | $ curl -XPOST ' | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | { " | ||
| - | ], | ||
| - | " | ||
| - | { " | ||
| - | ] | ||
| - | } | ||
| - | } | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | === Поиск по регулярным выражениям === | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XGET ' | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | }, | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | } | ||
| - | ], | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | [[https:// | ||
| - | ==== Примеры запросов / Query DSL ==== | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XGET http:// | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | }, | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | ] | ||
| - | } | ||
| - | } | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | * где: | ||
| - | * 1vse - название БД | ||
| - | * product.title - название таблицы | ||
| - | |||
| - | |||
| - | |||
| - | ===== Создание индексов ===== | ||
| - | |||
| - | Данная операция создаст инжекс test | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPUT " | ||
| - | { | ||
| - | " | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | === Получить список созданых индексов === | ||
| - | |||
| - | <code bash> | ||
| - | $ curl --silent -XGET " | ||
| - | </ | ||
| - | |||
| - | ответ от elasticsearch | ||
| - | <code bash> | ||
| - | yellow open 1vse 5 1 147785 0 197.3mb 197.3mb | ||
| - | yellow open 1vse_logs 5 1 439914 0 | ||
| - | </ | ||
| - | |||
| - | <code bash> | ||
| - | $ curl --silent -XGET " | ||
| - | </ | ||
| - | |||
| - | ответ от elasticsearch | ||
| - | <code bash> | ||
| - | health status index pri rep docs.count docs.deleted store.size pri.store.size | ||
| - | yellow open | ||
| - | yellow open | ||
| - | </ | ||
| - | |||
| - | ==== Фильтры ==== | ||
| - | |||
| - | === Фильтр worddelimiter === | ||
| - | |||
| - | Фильтр worddelimiter разбивает слова на несколько частей. Небольшой пример: | ||
| - | |||
| - | Примеры: | ||
| - | <code json> | ||
| - | </ | ||
| - | |||
| - | === Фильтр stopwords === | ||
| - | |||
| - | Фильтр stopwords состоит из списка слов запрещенных к индексированию. Например он исключает такие слова, как “and”, “a”, “the”, “to” и т.д. Конечно этот список уникален для каждого языка, но существует довольно много заготовок, | ||
| - | |||
| - | Примеры: | ||
| - | <code json> | ||
| - | </ | ||
| - | |||
| - | === Фильтр snowball === | ||
| - | |||
| - | Фильтр snowball используется для группировки слов по их основе. Фильтр применяет набор правил для правильного определения основы слова. Это означает, | ||
| - | |||
| - | Примеры: | ||
| - | <code json> | ||
| - | </ | ||
| - | |||
| - | === Фильтр elison === | ||
| - | |||
| - | Фильтр elison имеет большее значения для некоторых языков (например французский) и не так важен для других (например английский). Он исключает маловажные слова перед индексированием, | ||
| - | |||
| - | Примеры: | ||
| - | <code json> | ||
| - | </ | ||
| - | |||
| - | === Фильтр lowercase === | ||
| - | |||
| - | |||
| - | === Фильтр asciifolding === | ||
| - | |||
| - | Заменяет все Unicode символы, | ||
| - | |||
| - | === Лексеры === | ||
| - | |||
| - | == nGram == | ||
| - | |||
| - | Роль лексера nGram очень высока. Например, | ||
| - | |||
| - | == Пример 1 == | ||
| - | |||
| - | " | ||
| - | " | ||
| - | |||
| - | Результат: | ||
| - | fu, fun, un, unn, nn, nny, po, pon, on, ony, ny | ||
| - | 2-ой пример с лучшей настройкой: | ||
| - | |||
| - | == Пример 2 == | ||
| - | |||
| - | " | ||
| - | " | ||
| - | | ||
| - | Результат: | ||
| - | fun, funn, funny, unn, unny, nny, pon, pony, ony | ||
| - | |||
| - | |||
| - | ==== Анализаторы ==== | ||
| - | |||
| - | По умолчанию в Eldsticseach включен регистрозависимый анализатор поиска. Для его отключения используем ниже следующие настройки в конфигурационом файле elasticsearch.yml | ||
| - | |||
| - | <code json> | ||
| - | settings: | ||
| - | index: | ||
| - | analysis: | ||
| - | analyzer: | ||
| - | string_lowercase: | ||
| - | tokenizer: keyword | ||
| - | filter: lowercase | ||
| - | </ | ||
| - | ==== Мапинг ==== | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XGET " | ||
| - | </ | ||
| - | |||
| - | ==== Примеры индексов ==== | ||
| - | |||
| - | <code yaml> | ||
| - | settings: | ||
| - | index: | ||
| - | analysis: | ||
| - | analyzer: | ||
| - | app_analyzer: | ||
| - | type: custom | ||
| - | tokenizer: nGram | ||
| - | filter | ||
| - | app_search_analyzer: | ||
| - | type: custom | ||
| - | tokenizer: standard | ||
| - | filter | ||
| - | tokenizer: | ||
| - | nGram: | ||
| - | type: " | ||
| - | min_gram: 2 | ||
| - | max_gram: 20 | ||
| - | filter: | ||
| - | snowball: | ||
| - | type: | ||
| - | language: English | ||
| - | app_ngram: | ||
| - | type: " | ||
| - | min_gram: 2 | ||
| - | max_gram: 20 | ||
| - | worddelimiter : | ||
| - | type: word_delimiter | ||
| - | stopwords: | ||
| - | | ||
| - | | ||
| - | | ||
| - | </ | ||
| - | |||
| - | * https:// | ||
| - | |||
| - | ===== Работа с документом ===== | ||
| - | |||
| - | ==== Подокументно ==== | ||
| - | |||
| - | === Получение документа === | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XGET " | ||
| - | </ | ||
| - | |||
| - | ответ от elasticsearch | ||
| - | <code json> | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | === Добавление документа / Заполенение индекса === | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPUT " | ||
| - | { | ||
| - | " | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | ответ от elasticsearch | ||
| - | <code json> | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | === Обновление документа === | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPOST " | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | ответ от elasticsearch | ||
| - | <code json> | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | === Частичное обновление документа === | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPUT " | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | } | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | ответ от elasticsearch | ||
| - | <code json> | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | === Обновление документа с учетом параметров === | ||
| - | |||
| - | == > v 2.3 == | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPOST ' | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | }{ | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | == v 2.3 > == | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPOST ' | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | }, | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | } | ||
| - | ] | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | }, | ||
| - | " | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | === Получение документа из индекса по ID === | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XGET " | ||
| - | </ | ||
| - | |||
| - | ответ от elasticsearch | ||
| - | <code json> | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | { | ||
| - | " | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | === Удаление документа из индекса === | ||
| - | |||
| - | Удаление по индексу | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XDELETE ' | ||
| - | </ | ||
| - | |||
| - | |||
| - | Мы также имеем возможность удалить несколько документов совпавших с условием запроса. Данный пример показывает как удалить все документы из индекса customers, содержащие «John»: | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XDELETE ' | ||
| - | { | ||
| - | " | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | ==== Работа с частичными данными документа ==== | ||
| - | |||
| - | === Настройки elasticsearch.yml === | ||
| - | |||
| - | script.update: | ||
| - | script.mapping: | ||
| - | script.engine.groovy.file.aggs: | ||
| - | script.engine.groovy.file.mapping: | ||
| - | script.engine.groovy.file.search: | ||
| - | script.engine.groovy.file.update: | ||
| - | script.engine.groovy.file.plugin: | ||
| - | script.engine.groovy.indexed.aggs: | ||
| - | script.engine.groovy.indexed.mapping: | ||
| - | script.engine.groovy.indexed.search: | ||
| - | script.engine.groovy.indexed.update: | ||
| - | script.engine.groovy.indexed.plugin: | ||
| - | script.engine.groovy.inline.aggs: | ||
| - | script.engine.groovy.inline.mapping: | ||
| - | script.engine.groovy.inline.search: | ||
| - | script.engine.groovy.inline.update: | ||
| - | script.engine.groovy.inline.plugin: | ||
| - | |||
| - | === Создание массива === | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -s -XPOST ' | ||
| - | " | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | === Добавление в массив === | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPOST ' | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | === Удаление из массива === | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -s -XPOST ' | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | }' | ||
| - | </ | ||
| - | |||
| - | * https:// | ||
| - | * https:// | ||
| - | * https:// | ||
| - | |||
| - | |||
| - | |||
| - | ==== Пакетная обработка документов ==== | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPOST ' | ||
| - | {" | ||
| - | {" | ||
| - | {" | ||
| - | {" | ||
| - | </ | ||
| - | |||
| - | Данный пример обновляет первый документ (с ID равным 1) и затем удаляет второй документ (с ID равным 2) в одной массовой операции: | ||
| - | |||
| - | <code bash> | ||
| - | $ curl -XPOST ' | ||
| - | {" | ||
| - | {" | ||
| - | {" | ||
| - | </ | ||
| - | |||
| - | === Параметры выдачи === | ||
| - | |||
| - | * _source - | ||
| - | * _score - Оценка - это числовое значение, | ||
| - | |||
| - | ==== Агрегация ==== | ||
| - | |||
| - | ==== Плагины / Plugins ==== | ||
| - | |||
| - | |||
| - | * [[system: | ||
| - | |||
| - | ===== Ошибки / Errors ===== | ||
| - | |||
| - | * snapshot_missing_exception: | ||
| - | * SnapshotMissingException: | ||
| - | * Data too large, data for [@timestamp] would be larger than limit <code bash> | ||
| - | $ curl -XPOST ' | ||
| - | </ | ||
| + | ==== Индексы ==== | ||
| - | ===== Клиенты ===== | + | * [[system: |
| - | * [[https:// | + | ==== Запросы ==== |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| + | * https:// | ||
| - | === Yii2 === | ||
| - | * https:// | + | ==== Примеры ==== |
| - | ==== Дискусии/ | + | * [[system: |
| + | * [[system: | ||
| + | * [[system: | ||
| + | * [[system: | ||
| + | * [[system: | ||
| + | * [[system: | ||
| + | * [[system: | ||
| - | * https:// | ||
| - | * https:// | ||
| - | ==== Документация/ | + | ==== Библиотеки ==== |
| - | * [[http://filepi.com/i/23Us5ws|Elasticsearch in Action.pdf]] | + | * https://github.com/dadoonet/fscrawler |
| - | * http:// | + | * https://github.com/elastic/ |
| - | * https://www.elastic.co/ | + | * https:// |
| - | * http:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * [[http:// | + | |
| - | * [[http:// | + | |
| - | * http:// | + | |
| - | * http:// | + | |
| - | * https://groups.google.com/forum/# | + | |
| - | * http:// | + | |
| - | * http:// | + | |
| - | * https:// | + | |
| - | * http:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * вжhttps:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | === Autocomplete / Shingles | + | === Расширения для Frameworks |
| - | * http:// | + | == Yii2 framework |
| - | * https:// | + | |
| - | * [[https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * http:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * http:// | + | |
| - | ==== Видео | + | |
| - | * https://www.youtube.com/channel/UCUaTRF8LDgE6rQoduLWsErA/ | + | * https://github.com/Mirocow/yii2-elasticsearch |
| - | * https://www.youtube.com/watch? | + | * https://github.com/Mirocow/yii2-elasticsearch-log |
| - | * https:// | + | * https://github.com/Mirocow/yii2-elasticsearch-debug |
| - | * https:// | + | |
| - | * https://www.youtube.com/watch? | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | ==== Презентации ==== | + | == PHP == |
| - | * http://www.slideshare.net/OmskIT/20130202-03-elasticsearch | + | * https://github.com/ |
| + | * https:// | ||
| + | ==== Программное обеспечение ==== | ||
| + | * [[system: | ||
| + | * [[system: | ||
| + | * **Beats** | ||
| + | * [[system: | ||
| + | * [[system: | ||
| + | * [[system: | ||
| + | * [[system: | ||
| + | * [[system: | ||
| + | * [[system: | ||