Вступление
Elastic – это поисковый сервер на основе Apache Lucene и обеспечивает распределенную полнотекстовую поисковую систему, доступную через постоянный интерфейс.
Elasticsearch – это схема меньше, а использует JSON вместо XML. Это открытый источник и встроенный в Java, что означает, что вы можете запустить ElaSticsearch на любой платформе, так как Java является независимой платформой.
Elasticsearch – это магазин на основе документов. Это альтернатива традиционным магазинам документов, поэтому его можно использовать для замены других документов, таких как Mongodb или RavendB.
Быстро и масштабируется
Elasticsearch невероятно быстр, когда дело доходит до поиска, поэтому, если ваш текущий поиск документов не дает вам производительность, а не масштабируется, а также хотелось бы, чтобы ELASTICSearch – значительно масштабируемый.
Терминология
Для всех тех, кто приезжает из традиционных баз данных MySQL, вот таблица, сравнивающая терминологию ELASTICSearch с традиционной терминологией реляционной базы данных:
Таблица сравнения терминологии.
Индекс | База данных |
Тип | Таблица |
Документ | Строка |
Как настроить Elasticsearch
Чтобы начать, вам нужно скачать Elasticsearch из Эта ссылка и расстегните Zipped файл в папке, где вы хотите разместить Elasticsearch.
Чтобы запустить это, откройте командный окно, перейдите в папку BIN, и введите elasticsearch запустить его. Убедитесь, что у вас есть Java_home
определена переменная среды.
Взаимодействие с Elasticsearch
Чтобы проверить, правильно ли установлены Elasticsearch IARK, используйте следующий URL в браузере:
http://localhost:9200/
Это должно показать вам вывод, например:
{ "name" : "Domo", "cluster_name" : "elasticsearch_root", "version" : { "number" : "2.2.0", "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe", "build_timestamp" : "2016-01-27T13:32:39Z", "build_snapshot" : false, "lucene_version" : "5.4.1" }, "tagline" : "You Know, for Search" }
После начала Elasticsearch вы можете использовать любой клиент API для отдыха, например почтальон или Fiddler Отказ
Restful API используются для взаимодействия с Elasticsearch. Общий шаблон, используемый для создания спокойного вызова, как показано ниже:
REST API Format : http://host:port/[index]/[type]/[_action/id]
Используемые методы http: get, post, put, delete
- Чтобы получить список всех доступных индексов в вашем elasticsearch, используйте следующий URL:
http://localhost:9200/_cat/indices
- Чтобы получить статус индекса (скажем, компания), используйте следующий URL:
http://localhost:9200/company?pretty
Первая часть ( localhost ) обозначает хозяин (сервер), где размещен ваш elasticsearch, а по умолчанию порт 9200.
http://localhost:9200/company/employee/_search
Вторая часть ( Компания ) – индекс последовал ( сотрудник ) Тип Имя, а затем (_ Поиск ) Действие Отказ
Elasticsearch позволяет использовать HTTP-методы, такие как Get, Posts, DealEts и ставит наряду с полезной нагрузкой, которая будет в структуре JSON.
В этом руководстве я предполагаю, что вы используете клиент OST API почтальон или Fiddler Чтобы запустить ниже упомянутые спокойные звонки.
Давайте посмотрим, как создать индекс, вставьте данные в него, а затем извлеките данные от elasticsearch.
Создание индекса
http://localhost:9200/company PUT { "settings": { "index": { "number_of_shards": 1, "number_of_replicas": 1 }, "analysis": { "analyzer": { "analyzer-name": { "type": "custom", "tokenizer": "keyword", "filter": "lowercase" } } }, "mappings": { "employee": { "properties": { "age": { "type": "long" }, "experience": { "type": "long" }, "name": { "type": "string", "analyzer": "analyzer-name" } } } } } }
Как только вы запустите вышеуказанную команду, это ответ получен:
{ "acknowledged": true }
Вышеуказанная команда создает индекс с именем Компания
С типом именем сотрудник
с полями возраст
, Опыт
и Имя
Отказ
Что такое анализаторы
Elasticsearch – это текстовая поисковая система на основе Apache Lucene. Данные, которые будут проиндексированы, обрабатываются в соответствии с требованиями до расщепления на термины. Этот процесс называется анализом и выполняется анализаторами.
Процесс анализа включает в себя:
- Разделение текста в токены
- Стандартизация этих токенов, поэтому они становятся поиском.
Анализ состоит из трех функций:
- Фильтрация символов
- Токенизация и
- Токен фильтры
Фильтрация символов применяется на входной текстовой строке для отфильтровывания нежелательных терминов. Токенизаторы используются для разделиния струны в поток токенов. Условия, генерируемые после процесса токенизации, пропускаются через фильтр токена, который преобразует термины согласно стандартным требованиям пользователя. Например: фильтры токена могут использоваться для изменения токеризованных терминов в верхний регистр.
В вышеупомянутом индексе мы добавили следующий анализатор:
"analysis": { "analyzer": { "analyzer-name": { "type": "custom", "tokenizer": "keyword", "filter": "lowercase" } } }
Здесь мы создали пользовательский анализатор с именем «Analyzer Name», со следующими компонентами:
«Тип»: «Пользовательский» Анализатор типа
Пользовательские
Позволяет объединить токенизатор с нулевым или более токенным фильтрами токена и ноль или более шарных фильтров. Поскольку в вышеуказанном индексе нет фильтра символов, анализатор был определен с помощью таможенного типа.«Токенизатор»: «Ключевое слово» Этот токенизатор излучает весь ввод как один вывод.
«Фильтр»: «строчные» Жизненный фильтр преобразует все токены, входящие в него в строчные.
Вставка данных
Нам нужно передавать документ в виде объекта JSON в качестве параметра данных при создании вызова HTTP API.
http://localhost:9200/company/employee/?_create POST { "name": "Andrew", "age" : 45, "experience" : 10 }
Ответ:
{ "_index": "company", "_type": "employee", "_id": "AVM8D42POa82oxyTa_Pu", "_version": 1, "_shards": { "total": 2, "successful": 1, "failed": 0 }, "created": true }
Таким образом, мы можем вставить один документ за раз. Для того, чтобы вставить несколько документов, мы будем использовать объемную API elasticsearch.
Извлечение данных
Чтобы прочитать все записи типа в пределах индекса, используйте следующие команды с методом Get HTTP:
http://localhost:9200/company/employee/_search http://localhost:9200/vehicles/car/_search http://localhost:9200/vehicles/bike/_search http://localhost:9200/vehicles/truck/_search
Вышеуказанные URL-адреса поиск в индексе по имени транспортные средства У, в котором есть типы документов, автомобиль, велосипед и грузовик. Каждый из этих документов будет содержать конкретные данные, связанные с автомобилем, велосипедом и грузовиком соответственно.
- Можно выполнить множество других операций, использующих aTe apis estearsearceark, например:
- Проверка состояния Elasticsearch Server,
- Выполнение CRUD (создайте, чтение, обновление и удаление) и поиск операций против ваших индексов.
- Выполнять операции, такие как пейджинг, сортировка, фильтрация, сценария, агрегаты, агрегации и т. Д.
Получение данных с условным поиском
- Получить все документы: Вышеупомянутый URL можно переписать с помощью
match_all
Параметр для возврата всех документов A Тип в пределах индекс Отказ
Большинство остальных клиентов (например, почтальон) не принимают тело с ПОЛУЧАТЬ метод, так что вы можете использовать СТАВИТЬ вместо. Я показал примеры с ПОЛУЧАТЬ метод.
http://localhost:9200/company/employee/_search GET { "query": { "match_all": {} } }
Ответ:
{ "took":4, "timed_out":false, "_shards":{ "total":5, "successful":5, "failed":0 }, "hits":{ "total":1, "max_score":1.0, "hits":[ { "_index":"company", "_type":"employee", "_id":"AVM8D42POa82oxyTa_Pu", "_score":1.0," _source":{ "name": "Andrew", "age" : 45, "experience" : 10 } } ] } }
- Получить всех сотрудников с определенным именем: Чтобы получить все сотрудники с именем «Andrew», вы можете использовать параметр запроса и указать состояние внутри него.
http://localhost:9200/company/employee/_search GET { "query": { "match": { "name": "Andrew" } } }
Ответ:
{ "took":7, "timed_out":false, "_shards":{ "total":5, "successful":5, "failed":0 }, "hits":{ "total":1, "max_score":0.30685282, "hits":[ { "_index":"company", "_type":"employee", "_id":"AVM8D42POa82oxyTa_Pu", "_score":0.30685282," _source":{ "name": "Andrew", "age" : 45, "experience" : 10 } } ] } }
- Вот как привлечь всех сотрудников с возрастом больше, чем число :
http://localhost:9200/company/employee/_search GET { "query": { "range": { "age": { "gte": 35 } } } }
Ответ:
{ "took": 3, "timed_out": false, "_shards": { "total": 1, "successful": 1, "failed": 0 }, "hits": { "total": 3, "max_score": 1, "hits":[{ "_index":"company", "_type":"employee", "_id":"AVM8D42POa82oxyTa_Pu", "_score":0.30685282, "_source":{ "name": "Andrew", "age" : 45, "experience" : 10 } }] } }
- Получить данные с несколькими условиями: Вы также можете объединить несколько пунктов и добавить их в один параметр запроса, например
http://localhost:9200/company/employee/_search GET { "bool": { "must": { "match": {"name": "Andrew" }}, "should": { "range": {"age": { "gte": 35 }}} } }
Ответ:
{ "took":31, "timed_out":false, "_shards":{ "total":5,"successful":5,"failed":0}, "hits":{ "total":1, "max_score":0.04500804, "hits":[{ "_index":"company", "_type":"employee", "_id":"AVM8D42POa82oxyTa_Pu", "_score":0.04500804, "_source":{ "name": "Andrew", "age" : 45, "experience" : 10 } }] } }
Резюме
Elasticsearch поможет вам разрешить множество проблем оптимизации поиска в ваших существующих приложениях. Это полезно для предоставления ваших пользователей качественный поиск, а также позволить им найти то, что они действительно ищут.