Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
system:elasticsearch [2017/09/03 20:24] – [Клиенты] mirocowsystem:elasticsearch [2019/07/15 19:12] (текущий) – [Примеры] mirocow
Строка 3: Строка 3:
 ====== Elasticsearch - поисковая система ====== ====== Elasticsearch - поисковая система ======
  
-===== Устанока =====+===== Документация =====
  
-**nano ~/elasticsearch-install.sh*+  https://www.elastic.co/guide/en/elasticsearch/reference/7.0/index.html 
-<code bash> +  https://www.elastic.co/guide/en/elasticsearch/reference/6.8/index.html 
-#!/usr/bin/sh+  * https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html 
 +===== Установка =====
  
-VERSION=2.4.0+  * [[:system:elasticsearch:2.4.x]] 
 +  * [[:system:elasticsearch:5.x.x]]
  
-apt-get install openjdk-8-jdk 
-rm /etc/alternatives/java 
-ln -s /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java /etc/alternatives/java 
- 
-export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 
-export PATH=$JAVA_HOME/bin:$PATH 
- 
-if [ ! -f elasticsearch-$VERSION.deb ]; then 
-  wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/$VERSION/elasticsearch-$VERSION.deb 
-fi 
- 
-sudo dpkg -i elasticsearch-$VERSION.deb 
- 
-# be sure you add "action.disable_delete_all_indices" : true to the config!! 
- 
-# start script 
-sudo /etc/init.d/elasticsearch restart 
- 
-if [ -f /usr/bin/plugin ]; then 
-  rm /usr/bin/plugin 
-fi 
- 
-sudo ln -s /usr/share/elasticsearch/bin/plugin /usr/bin/plugin 
- 
-# ------------------------------------------------------------------------------------ 
- 
-# if you want to remove it: 
-#sudo dpkg -r elasticsearch 
- 
-# binaries & plugin 
-#/usr/share/elasticsearch/bin 
- 
-# log dir 
-#/var/log/elasticsearch 
- 
-# data dir 
-#/var/lib/elasticsearch 
- 
-# config dir 
-#/etc/elasticsearch 
- 
-# 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 
-</code> 
 ==== Установка и настройка Elasticsearch ==== ==== Установка и настройка Elasticsearch ====
  
Строка 73: Строка 28:
 <note important>Elasticsearch JVM не должен занимать больше половины всего объема памяти.</note> <note important>Elasticsearch JVM не должен занимать больше половины всего объема памяти.</note>
  
-[[https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html|Подробнее...]] +nano /etc/elasticsearch/jvm.options 
- +<code> 
 +-Xms2g 
 +-Xmx2g 
 +</code>
 ===== Проверка работоспособности сервера ===== ===== Проверка работоспособности сервера =====
  
Строка 89: Строка 46:
 </code> </code>
  
-===== Создание дампа / Dump create =====+===== Статьи / Документация / Примеры индексов / Примеры запросов =====
  
-  * English: https://gist.github.com/lucidlibrary/188d6ff895e56c83dea3+==== Документация ====
  
-<note important>Добавляем путь до сохранения снапшотов в конфигурационный файл+=== Уроки ===
  
-nano /usr/local/etc/elasticsearch/elasticsearch.yml +  * [[https://codedzen.ru/elasticsearch-vvedeniye-1-1-osnovnyye-ponyatiya|Elasticsearch Введение — 1.1 Основные понятия]] 
-<code bash> +  * [[https://codedzen.ru/elasticsearch-vvedeniye-1-2-vzaimodeystviye/|Elasticsearch Введение — 1.2 Взаимодействие]] 
-path.repo: ["/usr/local/var/elasticsearch/snapshot"+  * [[https://codedzen.ru/elasticsearch-vvedeniye-1-3-kak-rabotayet-poisk|Elasticsearch Введение — 1.3 Как работает поиск?]] 
-</code> +  * [[https://codedzen.ru/elasticsearch-vvedeniye-1-4-masshtabiruyemost-i-dost|Elasticsearch Введение — 1.4 Масштабируемость и доступность]] 
-</note>+  * [[https://codedzen.ru/elasticsearch-urok-3-1-mapping-skhema-dokumentov/|Elasticsearch — Урок 3.1 Mappingсхема документов]] 
 +  * [[https://codedzen.ru/elasticsearch-urok-3-2-raznitsa-mezhdu-polnotekstov/|Elasticsearch — Урок 3.2 Разница между полнотекстовым поиском и точным соответствием]] 
 +  * [[https://codedzen.ru/elasticsearch-urok-3-3-osnovnyye-tipy-dannykh/|Elasticsearch — Урок 3.3 Основные типы данных]
 +  * [[https://codedzen.ru/elasticsearch-urok-3-4-slozhnye-tipy-dannyh|Elasticsearch — Урок 3.4 Сложные типы данных]] 
 +  * [[https://codedzen.ru/elasticsearch-urok-3-5-tip-geodannyye|Elasticsearch — Урок 3.5 Тип геоданные]] 
 +  * [[https://codedzen.ru/elasticsearch-urok-3-6-spetsializirovannyye-tipy-da|Elasticsearch — Урок 3.6 Специализированные типы данных (IP, Completion, Percolator)]] 
 +  * [[https://codedzen.ru/elasticsearch-urok-3-7-mapping-odnogo-i-togo-zhe-pol|Elasticsearch — Урок 3.7 Маппинг одного и того же поля с разными типами данных (fieldsmapping)]] 
 +  * [[https://codedzen.ru/elasticsearch-urok-3-8-otnosheniya-mezhdu-dokumentam|Elasticsearch — Урок 3.8 Отношения между документами (_parent, has_child/has_parent, Nested)]] :!: запросы к родительским-дочерним типам документов очень дороги 
 +  * [[https://codedzen.ru/elasticsearch-urok-4-2-obnovleniye-dannykh|Elasticsearch — Урок 4.2 Обновление данных]] 
 +  * [[https://codedzen.ru/elasticsearch-urok-4-3-konkurentsiya-pri-obnovlenii|Elasticsearch — Урок 4.3 Конкуренция при обновлении]] 
 +  * [[https://codedzen.ru/category/uroki/elasticsearch/page/2/|Elasticsearch — Урок 5.1 Массовые операции (_bulk)]] 
 +  * [[https://codedzen.ru/elasticsearch-urok-5-2-reindex-api/|Elasticsearch — Урок 5.2 Reindex API]] 
 +  * [[https://codedzen.ru/elasticsearch-urok-5-3-ingest-node|Elasticsearch — Урок 5.3 Ingest Node (Logstash)]] 
 +  * [[https://codedzen.ru/elasticsearch-urok-5-4-organizatsiya-vashikh-dannykh/|Elasticsearch — Урок 5.4 Организация данных]] 
 +  * [[https://codedzen.ru/elasticsearch-urok-5-5-shrink-api/|Elasticsearch — Урок 5.5 Shrink API]] 
 +  * [[https://codedzen.ru/elasticsearch-urok-6-1-tipy-zaprosov/|Elasticsearch — Урок 6.1 Типы запросов]]
  
-==== Регистрация ====+=== Статьи / Дискуссии ===
  
 +  * [[system:elasticsearch:index-types]]
 +  * [[system:elasticsearch:dump-restore]]
 +  * [[system:elasticsearch:requests]]
 +  * https://qbox.io/blog/tag/elasticsearch
 +  * https://medium.com/tag/elasticsearch
 +  * https://discuss.elastic.co/c/in-your-native-tongue/russian
 +  * [[https://habrahabr.ru/search/?target_type=posts&q=%5Belasticsearch%5D&order_by=date|Статьи]]
 +  * [[https://habrahabr.ru/post/320390/|Хайлайтинг больших текстовых полей в ElasticSearch]]
  
-<code bash> 
-$ curl -XPUT 'http://localhost:9200/_snapshot/backup' -d '{ 
-    "type": "fs", 
-    "settings": { 
-        "location": "/usr/local/var/elasticsearch/snapshot", 
-        "compress": true 
-    } 
-}' 
-</code>  
  
-  * где:  
-    * backup - название репозитория 
-    * /usr/local/var/elasticsearch/snapshot - папка с содержанием самого репозитория 
  
-==== Проверка регистрации ==== +==== Индексы ====
- +
-<code bash> +
-$ curl -XGET "http://localhost:9200/_snapshot/_all?pretty" +
-</code> +
- +
-ответ от elasticsearch +
-<code json> +
-+
-  "backup" : { +
-    "type" : "fs", +
-    "settings" : { +
-      "compress" : "true", +
-      "location" : "/usr/local/var/elasticsearch/snapshot/backup" +
-    } +
-  } +
-+
-</code> +
- +
-==== Проверка целостности ==== +
- +
-<code bash> +
-$ curl -XPOST "http://localhost:9200/_snapshot/backup/_verify +
-</code> +
- +
-ответ от elasticsearch +
-<code json> +
-{"nodes":{"zKsDO_G3SlCdbLlhVmgLKA":{"name":"Vapor"}}} +
-</code> +
- +
-==== Создание snapshot / Backup ==== +
- +
-<code bash> +
-$ curl -XPUT "http://localhost:9200/_snapshot/backup/my_index/?wait_for_completion=true" +
-</code> +
- +
-Где my_index является существующим индексом. +
- +
-Проверить наличие инднеса можно командой +
-<code bash> +
-$ curl --silent -XGET  "http://localhost:9200/_stats?pretty"|grep my_index +
-</code> +
- +
-==== Удаление регистрации репозитория ==== +
- +
-<code bash> +
-$ curl -XDELETE 'http://localhost:9200/_snapshot/backup' +
-</code> +
- +
-===== Восстановление / Restore ===== +
- +
-  * English: https://gist.github.com/lucidlibrary/188d6ff895e56c83dea3 +
- +
- +
-==== Настройка ==== +
- +
-Если ранее небыл зарегистрирован. +
- +
-<code bash> +
-$ curl -XPUT 'http://localhost:9200/_snapshot/_restore?wait_for_completion=true' -d '{ +
-    "type": "fs", +
-    "settings":+
-        "location": "/usr/local/var/elasticsearch/snapshot", +
-        "compress": true +
-    } +
-}' +
-</code> +
- +
-  * где:  +
-    * backup - название репозитория +
-    * /usr/local/var/elasticsearch/snapshot - папка с содержанием самого репозитория +
- +
-==== Проверка ==== +
- +
-<code bash> +
-$ curl -XPOST http://localhost:9200/_snapshot/backup/_verify?pretty +
-</code> +
- +
-==== Восстановление ==== +
- +
-<code bash> +
-$ curl -XPOST http://localhost:9200/_snapshot/backup/_restore?pretty +
-</code> +
- +
-===== Запрос поиска ===== +
- +
-==== Способы запроса ==== +
- +
-  * [[system:elasticsearch:sdl]] +
- +
-=== GET === +
- +
- +
-Вывод всех документов из индекса +
- +
-<code bash> +
-$ curl -XGET 'localhost:9200/test/_search?q=*&pretty' +
-</code> +
- +
-=== REST === +
- +
- +
-Вывод всех документов из индекса +
- +
-<code bash> +
-$ curl -XPOST 'localhost:9200/1vse/_search?pretty' -d ' +
-+
-  "query": { "match_all": {} } +
-}' +
-</code> +
- +
-== Доступные параметры для REST запросов == +
- +
- +
-<code bash> +
-$ curl -XPOST 'localhost:9200/1vse/_search?pretty' -d ' +
-+
-  "query": { "match_all": {} }, +
-  "size":+
-}' +
-</code> +
- +
-<code bash> +
-$ curl -XPOST 'localhost:9200/1vse/_search?pretty' -d ' +
-+
-  "query": { "match": { "title": "Thomson T50E10DHU-01B" } }, +
-  "_source": ["title", "category", "brand"+
-}' +
- +
-$ curl -XPOST 'localhost:9200/1vse/_search?pretty' -d ' +
-+
-  "query": { "match_phrase": { "category": "телевизоры" } }, +
-  "_source": ["title", "category", "brand"+
-}' +
- +
-$ curl -XPOST 'localhost:9200/bank/_search?pretty' -d ' +
-+
-  "query":+
-    "bool":+
-      "must":+
-        { "match": { "age": "40" } } +
-      ], +
-      "must_not":+
-        { "match": { "state": "ID" } } +
-      ] +
-    } +
-  } +
-}' +
-</code> +
- +
-=== Поиск по регулярным выражениям === +
- +
-<code bash> +
-$ curl -XGET 'http://localhost:9200/_search' -d '{ +
-    "filter":+
-        "bool":+
-            "should":+
-                { +
-                    "regexp":+
-                        "word": "мульт.*" +
-                    } +
-                }, +
-                { +
-                    "regexp":+
-                        "word": "фильм.*" +
-                    } +
-                } +
-            ], +
-            "must_not":+
-                "terms":+
-                    "word": ["видео", "скачать"+
-                } +
-            } +
-        } +
-    } +
-}' +
-</code> +
- +
-[[https://www.elastic.co/guide/en/elasticsearch/guide/master/_validating_queries.html|Подробнее...]] +
-==== Примеры запросов / Query DSL ==== +
- +
-<code bash> +
-$ curl -XGET http://localhost:9200/1vse/product/_search/ -d '{ +
-  "size": 10, +
-  "query":+
-    "bool":+
-      "should":+
-        { +
-          "function_score":+
-            "weight": 100, +
-            "query":+
-              "match":+
-                "product.title": "samsung" +
-              } +
-            } +
-          } +
-        }, +
-        { +
-          "function_score":+
-            "weight": 80, +
-            "query":+
-              "match_phrase_prefix":+
-                "product.title": "samsung" +
-              } +
-            } +
-          } +
-        } +
-      ] +
-    } +
-  } +
-}' +
-</code> +
- +
-  * где:  +
-    * 1vse - название БД +
-    * product.title - название таблицы +
- +
- +
- +
-===== Создание индексов ===== +
- +
-Данная операция создаст инжекс test +
- +
-<code bash> +
-$ curl -XPUT "http://localhost:9200/test?pretty" +
-+
-  "acknowledged" : true +
-+
-</code> +
- +
-=== Получить список созданых индексов === +
- +
-<code bash> +
-$ curl --silent -XGET  "http://localhost:9200/_cat/indices?pretty" +
-</code> +
- +
-ответ от elasticsearch +
-<code bash> +
-yellow open 1vse      5 1 147785 0 197.3mb 197.3mb +
-yellow open 1vse_logs 5 1 439914 0   1.6gb   1.6gb +
-</code> +
- +
-<code bash> +
-$ curl --silent -XGET  "http://localhost:9200/_cat/indices?v" +
-</code> +
- +
-ответ от elasticsearch +
-<code bash> +
-health status index     pri rep docs.count docs.deleted store.size pri.store.size +
-yellow open   1vse        5       147785            0    197.3mb        197.3mb +
-yellow open   1vse_logs         439914            0      1.6gb          1.6gb +
-</code> +
- +
-==== Фильтры ==== +
- +
-=== Фильтр worddelimiter === +
- +
-Фильтр worddelimiter разбивает слова на несколько частей. Небольшой пример: представьте, что вы допустили опечатку в предложении “To be or not to be.That is the question”. Если вы обратите внимание, то заметите отсутствие пробела после точки. Без этого фильтра Elasticsearch проиндексирует “be.That” как одно слово - “bethat”. При помощи этого фильтра мы указываем ему индексировать эти слова по отдельности - “be” и “that”. +
- +
-Примеры: +
-<code json> +
-</code> +
- +
-=== Фильтр stopwords === +
- +
-Фильтр stopwords состоит из списка слов запрещенных к индексированию. Например он исключает такие слова, как “and”, “a”, “the”, “to” и т.д. Конечно этот список уникален для каждого языка, но существует довольно много заготовок, которые вы можете использовать. +
- +
-Примеры: +
-<code json> +
-</code> +
- +
-=== Фильтр snowball === +
- +
-Фильтр snowball используется для группировки слов по их основе. Фильтр применяет набор правил для правильного определения основы слова. Это означает, что разные настройки могут выдавать разные результаты. Например слова “indexing”, “indexable”, “indexes”, “indexation” и т.д. получать основу “index”. Хотелось бы отметить, что вы получите результат “Make my string indexable”, запросив “Indexing string”. +
- +
-Примеры: +
-<code json> +
-</code> +
- +
-=== Фильтр elison === +
- +
-Фильтр elison имеет большее значения для некоторых языков (например французский) и не так важен для других (например английский). Он исключает маловажные слова перед индексированием, например “j’attends que tu m’appelles” (Я жду вашего звонка) проиндексируется как “attends que tu appelles” (наконце слова “que” и “tu” будут исключены фильтром stopwords). Как вы видите слова “j’” и “m’” (Я) были удалены из-за настройки фильтра elison. +
- +
-Примеры: +
-<code json> +
-</code> +
- +
-=== Фильтр lowercase === +
- +
- +
-=== Фильтр asciifolding === +
- +
-Заменяет все Unicode символы, не входящие в латинский алфавит на их ascii эквивалент. +
- +
-=== Лексеры === +
- +
-== nGram == +
- +
-Роль лексера nGram очень высока. Например, наш поиск “funny pony” был разбит на несколько частей. Вот два примера: +
- +
-== Пример 1 == +
- +
-  "min_gram" : "2", +
-  "max_gram" : "3" +
- +
-  Результат: +
-  fu, fun, un, unn, nn, nny, po, pon, on, ony, ny +
-  2-ой пример с лучшей настройкой: +
- +
-== Пример 2 == +
- +
-  "min_gram" : "3", +
-  "max_gram" : "20" +
-   +
-  Результат: +
-  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> +
-==== Мапинг ==== +
- +
-<code bash> +
-$ curl -XGET "http://localhost:9200/1vse_logs/_mapping?pretty=true" +
-</code> +
- +
-==== Примеры индексов ==== +
- +
-<code yaml> +
-            settings: +
-                index: +
-                    analysis: +
-                        analyzer: +
-                            app_analyzer: +
-                                type: custom +
-                                tokenizer: nGram +
-                                filter   : [stopwords, app_ngram, asciifolding, lowercase, snowball, worddelimiter] +
-                            app_search_analyzer: +
-                                type: custom +
-                                tokenizer: standard +
-                                filter   : [stopwords, app_ngram, asciifolding, lowercase, snowball, worddelimiter] +
-                        tokenizer: +
-                            nGram: +
-                                type:     "nGram" +
-                                min_gram: 2 +
-                                max_gram: 20 +
-                        filter: +
-                            snowball: +
-                                type:     snowball +
-                                language: English +
-                            app_ngram: +
-                                type: "nGram" +
-                                min_gram: 2 +
-                                max_gram: 20 +
-                            worddelimiter : +
-                                 type: word_delimiter +
-                            stopwords: +
-                                 type:      stop +
-                                 stopwords: [_french_] +
-                                 ignore_case : true +
-</code> +
- +
-  * https://github.com/asyncee/elasticsearch-russian-config +
- +
-===== Работа с документом ===== +
- +
-==== Подокументно ==== +
- +
-=== Получение документа === +
- +
-<code bash> +
-$ curl -XGET "http://localhost:9200/test/external/key1?pretty" +
-</code> +
- +
-ответ от elasticsearch +
-<code json> +
-+
-  "_index" : "test", +
-  "_type" : "external", +
-  "_id" : "key1", +
-  "_version" : 4, +
-  "found" : true, +
-  "_source": +
-+
-  "body":+
-      "name": "test test", +
-      "description": "Description" +
-   } +
-+
-+
-</code> +
- +
-=== Добавление документа / Заполенение индекса === +
- +
-<code bash> +
-$ curl -XPUT "http://localhost:9200/test/external/key1?pretty" -d ' +
-+
-  "body": {"name": "test"+
-}' +
-</code> +
- +
-ответ от elasticsearch +
-<code json> +
-+
-  "_index" : "test", +
-  "_type" : "external", +
-  "_id" : "1", +
-  "_version" : 1, +
-  "created" : true +
-+
-</code> +
- +
-=== Обновление документа === +
- +
-<code bash> +
-$ curl -XPOST "http://localhost:9200/test/external/key1?pretty" -d ' +
-+
-  "body":+
-      "pice_id": 3, +
-      "name": "test test", +
-      "description": "Description" +
-   } +
-}' +
-</code> +
- +
-ответ от elasticsearch +
-<code json> +
-+
-  "_index" : "test", +
-  "_type" : "external", +
-  "_id" : "1", +
-  "_version" : 1, +
-  "created" : true +
-+
-</code> +
- +
-=== Частичное обновление документа === +
- +
-<code bash> +
-$ curl -XPUT "http://localhost:9200/test/external/key1?pretty" -d ' +
-+
-  "body":+
-     "doc":+
-       "name": "test test" +
-      } +
-  } +
-}' +
-</code> +
- +
-ответ от elasticsearch +
-<code json> +
-+
-  "_index" : "test", +
-  "_type" : "external", +
-  "_id" : "1", +
-  "_version" : 1, +
-  "created" : true +
-+
-</code> +
- +
-=== Обновление документа с учетом параметров === +
- +
-== > v 2.3 == +
- +
-<code bash> +
-$ curl -XPOST 'http://localhost:9200/test/external/_bulk' -d ' +
-+
-  "update":+
-      "_index": "myindex", +
-      "_type": "type", +
-      "_id": "myid" +
-  } +
-}{ +
-  "doc":+
-      "field": "new value" +
-  } +
-}' +
-</code> +
- +
-== v 2.3 > == +
- +
-<code bash> +
-$ curl -XPOST 'http://localhost:9200/test/external/_update_by_query' -d ' +
-+
-  "query":+
-    "filtered":+
-      "filter":+
-        "bool":+
-          "must":+
-            { +
-              "term":+
-                "url": "stackoverflow.com" +
-              } +
-            }, +
-            { +
-              "missing":+
-                "field": "category" +
-              } +
-            } +
-          ] +
-        } +
-      } +
-    } +
-  }, +
-  "script" : "ctx._source.category = \"10\";" +
-}' +
-</code> +
- +
-=== Получение документа из индекса по ID === +
- +
-<code bash> +
-$ curl -XGET "http://localhost:9200/test/external/1?pretty" +
-</code> +
- +
-ответ от elasticsearch +
-<code json> +
-+
-  "_index" : "test", +
-  "_type" : "external", +
-  "_id" : "1", +
-  "_version" : 3, +
-  "found" : true, +
-  "_source": +
-+
-  "name": "test" +
-+
-+
-</code> +
- +
-=== Удаление документа из индекса === +
- +
-Удаление по индексу +
- +
-<code bash> +
-$ curl -XDELETE 'localhost:9200/customer/external/2?pretty' +
-</code> +
- +
- +
-Мы также имеем возможность удалить несколько документов совпавших с условием запроса. Данный пример показывает как удалить все документы из индекса customers, содержащие «John»: +
- +
-<code bash> +
-$ curl -XDELETE 'localhost:9200/customer/external/_query?pretty' -d ' +
-+
-  "query": { "match": { "name": "John" } } +
-}' +
-</code> +
- +
-==== Работа с частичными данными документа ==== +
- +
-=== Настройки elasticsearch.yml === +
- +
-  script.update: on +
-  script.mapping: on +
-  script.engine.groovy.file.aggs: on +
-  script.engine.groovy.file.mapping: on +
-  script.engine.groovy.file.search: on +
-  script.engine.groovy.file.update: on +
-  script.engine.groovy.file.plugin: on +
-  script.engine.groovy.indexed.aggs: on +
-  script.engine.groovy.indexed.mapping: on +
-  script.engine.groovy.indexed.search: on +
-  script.engine.groovy.indexed.update: on +
-  script.engine.groovy.indexed.plugin: on +
-  script.engine.groovy.inline.aggs: on +
-  script.engine.groovy.inline.mapping: on +
-  script.engine.groovy.inline.search: on +
-  script.engine.groovy.inline.update: on +
-  script.engine.groovy.inline.plugin: on +
- +
-=== Создание массива === +
- +
-<code bash> +
-$ curl -s -XPOST 'localhost:9200/1vse/product_for_mapping/1/_update' -d '{ +
-    "script" : "if(ctx._source.aliases.size() == 0){ctx._source.aliases = [];}" +
-}'  +
-</code> +
- +
-=== Добавление в массив === +
- +
-<code bash> +
-$ curl -XPOST 'localhost:9200/1vse/product_for_mapping/1/_update' -d '{ +
-    "script" : "ctx._source.aliases += alias", +
-    "params" : { +
-        "alias" : "Manfrotto MV-M500A" +
-    } +
-}'  +
-</code> +
- +
-=== Удаление из массива === +
- +
-<code bash> +
-$ curl -s -XPOST 'localhost:9200/1vse/product_for_mapping/1/_update' -d '{ +
-    "script" : "for (int i = 0; i < ctx._source.aliases.size(); i++){if(ctx._source.aliases[i] == value){ctx._source.aliases.remove(i);}}", +
-    "params" : { +
-        "value" : "Manfrotto MVM500A XXX" +
-    } +
-}' +
-</code> +
- +
-  * https://www.elastic.co/guide/en/elasticsearch/guide/1.x/partial-updates.html +
-  * https://www.elastic.co/guide/en/elasticsearch/reference/1.7/modules-scripting.html +
-  * https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-update.html +
- +
- +
- +
-==== Пакетная обработка документов ==== +
- +
-<code bash> +
-$ curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d ' +
-{"index":{"_id":"1"}} +
-{"name": "John Doe" } +
-{"index":{"_id":"2"}} +
-{"name": "Jane Doe" }' +
-</code> +
- +
-Данный пример обновляет первый документ (с ID равным 1) и затем удаляет второй документ (с ID равным 2) в одной массовой операции: +
- +
-<code bash> +
-$ curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d ' +
-{"update":{"_id":"1"}} +
-{"doc": { "name": "John Doe becomes Jane Doe" } } +
-{"delete":{"_id":"2"}}' +
-</code> +
- +
-=== Параметры выдачи === +
- +
-  * _source -  +
-  * _score - Оценка - это числовое значение, которое является относительной мерой того, насколько документ совпадает с поисковым запросом, который мы создали. Большие значения оценки показывают более релевантные (более полно совпадающие) документы, меньшие значение - менее релевантные. +
- +
-==== Агрегация ==== +
- +
-==== Плагины / Plugins ==== +
- +
- +
-  * [[system:elasticsearch:plugins]] +
- +
-===== Ошибки / Errors ===== +
- +
-  * snapshot_missing_exception: <code json>{"type": "no_such_file_exception","reason/usr/local/var/elasticsearch/snapshot/snap-snapshot.dat"}</code> +
-  * SnapshotMissingException: <code json>{"error":"SnapshotMissingException[[backup:snapshot] is missing]; nested: FileNotFoundException[/usr/local/var/elasticsearch/snapshot/snapshot-snapshot (No such file or directory)]; ","status":404}</code> snapshot не найден, так как дамп создавался с отличным названием снапшота от snapshot +
-  * Data too large, data for [@timestamp] would be larger than limit <code bash> +
-$ curl -XPOST 'http://localhost:9200/_cache/clear' +
-</code> +
- +
- +
-===== _search ===== +
- +
-<code json> +
-+
-  "query":+
-    "match":+
-      "FIELD": "TEXT" +
-    } +
-  } +
-+
-</code> +
- +
-<code json> +
-+
-  "query":+
-    "match":+
-      "FIELD":+
-        "query": "TEXT", +
-        "OPTION": "VALUE" +
-      } +
-    } +
-  } +
-+
-</code> +
- +
-<code json> +
-+
-  "query":+
-    "bool":+
-      "must":+
-        { +
-          "match":+
-            "title": "smith" +
-          } +
-        } +
-      ], +
-      "must_not":+
-        { +
-          "match_phrase":+
-            "title": "granny smith" +
-          } +
-        } +
-      ], +
-      "filter":+
-        { +
-          "exists":+
-            "field": "title" +
-          } +
-        } +
-      ] +
-    } +
-  }, +
-  "aggs":+
-    "my_agg":+
-      "terms":+
-        "field": "user", +
-        "size": 10 +
-      } +
-    } +
-  }, +
-  "highlight":+
-    "pre_tags":+
-      "<em>" +
-    ], +
-    "post_tags":+
-      "</em>" +
-    ], +
-    "fields":+
-      "body":+
-        "number_of_fragments": 1, +
-        "fragment_size": 20 +
-      }, +
-      "title": {} +
-    } +
-  }, +
-  "size": 20, +
-  "from": 100, +
-  "_source":+
-    "title", +
-    "id" +
-  ], +
-  "sort":+
-    { +
-      "_id":+
-        "order": "desc" +
-      } +
-    } +
-  ] +
-+
-</code> +
- +
-<code json> +
-"multi_match":+
-  "query": "Elastic", +
-  "fields": ["user.*", "title^3"], +
-  "type": "best_fields" +
-+
-</code> +
- +
-<code json> +
-"bool":+
-  "must": [], +
-  "must_not": [], +
-  "filter": [], +
-  "should": [], +
-  "minimum_should_match" : 1 +
-+
-</code> +
- +
-<code json> +
-"range":+
-  "age":+
-    "gte": 10, +
-    "lte": 20, +
-    "boost":+
-  } +
-+
-</code>+
  
-===== Клиенты =====+  * [[system:elasticsearch:mapping]]
  
-  * [[https://github.com/ruflin/Elastica|Elastica]] - (https://github.com/ruflin/Elastica) PHP клиент +==== Запросы ====
-  * https://github.com/taskrabbit/elasticsearch-dump - Дампер на nodejs +
-  * https://github.com/jprante/elasticsearch-jdbc - JDBC importer for Elasticsearch +
-  * https://github.com/toptal/chewy +
-  * https://github.com/elastic/elasticsearch-php +
-  * https://github.com/elastic/elasticsearch-js+
  
 +  * https://www.found.no/play/#
  
-=== Yii2 === 
  
-  * https://github.com/yiisoft/yii2-elasticsearch+==== Примеры ====
  
-==== Дискусии/Форумы ====+  * [[system:elasticsearch:exaples:example-1]] 
 +  * [[system:elasticsearch:exaples:example-2]] 
 +  * [[system:elasticsearch:exaples:example-3]] 
 +  * [[system:elasticsearch:exaples:example-4]]  
 +  * [[system:elasticsearch:exaples:example-5]]  
 +  * [[system:elasticsearch:exaples:example-6]]  
 +  * [[system:elasticsearch:exaples:example-7]] 
  
-  * https://discuss.elastic.co/c/in-your-native-tongue/15-category (текущая группа) 
-  * https://groups.google.com/forum/#!forum/elasticsearch-ru (бывшая группа) 
  
-==== Документация/Статьи ====+==== Библиотеки ====
  
-  * [[http://filepi.com/i/23Us5ws|Elasticsearch in Action.pdf]] +  * https://github.com/dadoonet/fscrawler (https://habr.com/company/digdes/blog/351002/) 
-  * http://elasticsearch.docwiki.ru/guide/ru/elasticsearch/reference/current/getting-started.html :!: (RUS) +  * https://github.com/elastic/elasticsearch 
-  * https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html#modules-snapshots +  * https://github.com/elastic/elasticsearch-x-pack-php
-  * http://habrahabr.ru/post/122531/ +
-  * https://xakep.ru/2015/06/11/elasticsearch-tutorial/ +
-  * https://habrahabr.ru/company/2gis/blog/213765/ +
-  * https://habrahabr.ru/company/likeastore/blog/223109/ +
-  * https://habrahabr.ru/company/likeastore/blog/223109/ +
-  * [[http://devacademy.ru/posts/effektivnaya-nastrojka-elasticsearch|Эффективная настройка Elasticsearch]] +
-  * [[http://devacademy.ru/posts/shpargalka-po-optimizatsii-indeksirovaniya-v-elasticsearch/|Шпаргалка по оптимизации индексирования в Elasticsearch]] +
-  * http://elasticsearch.docwiki.ru/guide/ru/elasticsearch/reference/current/getting-started.html - (RUS) +
-  * http://elasticsearch.docwiki.ru/forum/ +
-  * https://groups.google.com/forum/#!forum/elasticsearch-ru +
-  * http://openness.microsoft.com/ru-cee/blog/2015/05/26/elasticsearch-%D0%BD%D0%B0-azure/ +
-  * http://victor.4devs.io/ru/others/how-to-improve-on-site-search-on-e-commerce-with-elasticsearch.html +
-  * https://makeomatic.ru/blog/tags/ElasticSearch/ +
-  * http://ru.stackoverflow.com/questions/tagged/elasticsearch +
-  * [[https://habrahabr.ru/post/122531/|Быстрый полнотекстовый поиск ElasticSearch]] +
-  * [[https://habrahabr.ru/company/smartprogress/blog/226749/|ElasticSearch и поиск наоборот. Percolate API]] +
-  * [[https://habrahabr.ru/company/smartprogress/blog/227131/|ElasticSearch — агрегация данных]] +
-  * вжhttps://github.com/asyncee/elasticsearch-russian-config +
-  * [[https://habrahabr.ru/company/smartprogress/blog/227531/|ElasticSearch — mapping и поиск без сюрпризов]] +
-  * [[https://habrahabr.ru/post/229905/|Делаем простейший фильтр по свойствам товаров с помощью ElasticSearch на Symfony2]] +
-  * https://habrahabr.ru/post/280488/ +
-  * [[https://habrahabr.ru/company/mailru/blog/213849/|ElasticSearch 1.0 — новые возможности аналитики]] +
-  * [[https://habrahabr.ru/company/mailru/blog/258205/|Elasticsearch — сортируем выдачу руками]] +
-  * [[https://xakep.ru/2015/06/11/elasticsearch-tutorial/|Учимся работать с Elasticsearch «Хакер»]]+
  
-=== Autocomplete / Shingles ===+=== Расширения для Frameworks ===
  
-  * http://www.bilyachat.com/2015/07/search-like-google-with-elasticsearch.html +== Yii2 framework ==
-  * https://qbox.io/blog/an-introduction-to-ngrams-in-elasticsearch +
-  * [[https://books.google.ru/books?id=d19aBgAAQBAJ&pg=PA253&lpg=PA253&dq=elasticsearch+Searching+with+Shingles&source=bl&ots=NyiZtKGAgB&sig=A4RYhMZU_c6qqH-FYx7mAy82WbY&hl=ru&sa=X&ved=0ahUKEwiRsM3DqLnNAhVDFCwKHdJiByUQ6AEIaDAJ#v=onepage&q=elasticsearch%20Searching%20with%20Shingles&f=false|Searching for Shingles]] +
-  * https://www.elastic.co/blog/searching-with-shingles +
-  * https://codeslashslashcomment.com/2012/09/01/search-query-suggestions-using-elasticsearch-via-shingle-filter-and-facets/ +
-  * https://www.elastic.co/guide/en/elasticsearch/reference/1.7/analysis-shingle-tokenfilter.html +
-  * http://stackoverflow.com/questions/23295896/shingles-in-elasticsearch-why-does-this-example-with-custom-analyzer-fail +
-  * https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-shingle-tokenfilter.html +
-  * https://www.elastic.co/guide/en/elasticsearch/guide/current/shingles.html +
-  * http://www.codegur.press/27410253/using-shingles-and-stop-words-with-elasticsearch-and-lucene-4-4 +
-==== Видео ====+
  
-  * https://www.youtube.com/channel/UCUaTRF8LDgE6rQoduLWsErA/videos?nohtml5=False (ENG) +  * https://github.com/Mirocow/yii2-elasticsearch 
-  * https://www.youtube.com/watch?v=otc_tRYnjmo Безопастность или способы взлома Elasticsearch из фронтенда (RUS) +  * https://github.com/Mirocow/yii2-elasticsearch-log 
-  * https://www.youtube.com/watch?v=fe6kLv4UcVY (RUS) +  * https://github.com/Mirocow/yii2-elasticsearch-debug
-  * https://www.youtube.com/watch?v=i6mTsTpOi2Y на Ruby +
-  * https://www.youtube.com/watch?v=ARqtUizWkvg&list=PLlg3hnqqh7qEriIpdMSOLJzO5KhYffXua&nohtml5=False (ENG) +
-  * https://www.youtube.com/watch?v=Pse-2ZkVaTs&list=PLjQo0sojbbxWcy_byqkbe7j3boVTQurf9&nohtml5=False +
-  * https://vimeo.com/111068769 Elasticsearch, Logstash, Kibana +
-  * https://www.youtube.com/watch?v=IsOkcielysE - Elasticsearch, Logstash +
-  * https://www.youtube.com/watch?v=gqV6FOvq7gk +
-  * https://www.youtube.com/watch?v=XCHYo0CsZrk+
  
-==== Презентации ====+== PHP ==
  
-  * http://www.slideshare.net/OmskIT/20130202-03-elasticsearch+  * https://github.com/dontdrinkandroot/gitki.php 
 +  * https://github.com/phalcon/forum
  
 +==== Программное обеспечение ====
  
 +  * [[system:elasticsearch:logstash]]
 +  * [[system:elasticsearch:kibana]]
 +  * **Beats**
 +    * [[system:elasticsearch:filebeat]]
 +    * [[system:elasticsearch:metricbeat]]
 +    * [[system:elasticsearch:packetbeat]]
 +    * [[system:elasticsearch:winlogbeat]]
 +    * [[system:elasticsearch:auditbeat]]
 +    * [[system:elasticsearch:heartbeat]]