Полнотекстовый поиск является наиболее распространенным требованием, и Elasticsearch с открытым исходным кодом в настоящее время является первым выбором для полнотекстовых поисковых систем. Он может быстро хранить, искать и анализировать огромные объемы данных.
Википедия, Stack Overflow, Github — все используют его.
В основе Elastic лежит библиотека с открытым исходным кодом Lucene.
Однако вы не можете использовать Lucene напрямую, вы должны написать свой собственный код для вызова его интерфейса.
Elastic — это пакет Lucene, который предоставляет рабочий интерфейс REST API из коробки.
REST API: кроссплатформенный.
Глагол, эквивалентный вставке в MySQL;
существительное, эквивалентное базе данных в MySQL
2. Тип
В Index можно определить один или несколько типов;
Подобно таблице в MySQL, каждый тип данных сгруппирован вместе.
3. Документ
Сохранить данные (Документ) определенного типа (Тип) под определенным индексом (Индекс), документ в формате JSON,
Документ похож на содержимое таблицы в MySQL.
4. Механизм перевернутого индекса
слово
записывать
красное море
1,2,3,4,5
действие
1,2,3
проводить исследования
2,5
очень
3,5
Рекорды
4
Агент
5
分词: разделить все предложение на слова
ведется учет
1 - Операция Красное море
2- Исследуйте операцию «Красное море»
3- Специальные операции на Красном море
4-Рекорды Красного моря
5-Агенты Специальное исследование Красного моря
检索:
1), операция агента Красного моря?
2) Операция Красное море?
相关性得分:
2. Установка докера
1. Загрузите файл изображения
скачать эластичный поиск
docker pull elasticsearch:7.4.2 # 存储和检索数据
скачать кибана
docker pull kibana:7.4.2 # 可视化检索数据
Примечание: elasticsearch должен быть той же версии, что и kibana!
После установки elasticsearch запустим его, и найдем, что с помощьюdocker psКоманда не находит наш es при просмотре запущенного контейнера, что вызвано разрешениями текущего конфигурационного файла es, поэтому нам также необходимо модифицировать разрешения конфигурационного файла es:
[root@10 config]# cd ../
[root@10 elasticsearch]# ls
config data plugins
[root@10 elasticsearch]# cll
bash: cll: command not found
[root@10 elasticsearch]# ll
total 0
drwxr-xr-x. 2 root root 31 May 21 14:55 config
drwxr-xr-x. 2 root root 6 May 21 14:52 data
drwxr-xr-x. 2 root root 6 May 21 15:14 plugins
[root@10 elasticsearch]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
53c0e82ded18 redis "docker-entrypoint.s…" 6 weeks ago Up 4 hours 0.0.0.0:6379->6379/tcp redis
e1c1b5a6012e mysql:5.7 "docker-entrypoint.s…" 6 weeks ago Up 4 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
[root@10 elasticsearch]# chmod -R 777 /mydata/elasticsearch/
[root@10 elasticsearch]# ll
total 0
drwxrwxrwx. 2 root root 31 May 21 14:55 config
drwxrwxrwx. 2 root root 6 May 21 14:52 data
drwxrwxrwx. 2 root root 6 May 21 15:14 plugins
После изменения прав доступа к файлу мы используемdocker start elasticsearchЧтобы снова запустить es, используйтеdocker psПосле проверки команды обнаруживается, что контейнер все еще не запущен.Что это за вопрос?
Мы используемdocker logs elasticsearchВзгляните на журнал запуска es:
[root@10 elasticsearch]# docker logs elasticsearch
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
2020-05-21 15:14:13,179 main ERROR No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
Exception in thread "main" SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]];
at org.elasticsearch.common.settings.Settings$Builder.loadFromStream(Settings.java:1097)
at org.elasticsearch.common.settings.Settings$Builder.loadFromPath(Settings.java:1070)
at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:83)
at org.elasticsearch.cli.EnvironmentAwareCommand.createEnv(EnvironmentAwareCommand.java:95)
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:125)
at org.elasticsearch.cli.Command.main(Command.java:90)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92)
Caused by: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]]
at org.elasticsearch.common.xcontent.XContentParserUtils.ensureExpectedToken(XContentParserUtils.java:78)
at org.elasticsearch.common.settings.Settings.fromXContent(Settings.java:617)
at org.elasticsearch.common.settings.Settings.access$400(Settings.java:82)
Вышеупомянутая ошибка связана с моей предыдущей конфигурациейelasticsearch.ymlПара ключ-значение k-v неправильно настроена в файле.Посмотрев файл yml, вы обнаружите, что содержимое моей конфигурации выглядит следующим образом:
http.host:0.0.0.0
На самом деле между парами ключ-значение k-v должны быть пробелы, обратите внимание на формат ключ: значение в конфигурационном файле yml冒号за которым следует空格. В противном случае возникнет указанная выше ошибка.
Значит надо модифицироватьelasticsearch.ymlфайл, измененный на:
http.host: 0.0.0.0
Измените и сохраните и используйте сноваdocker start elasticsearchчтобы начать es, используйтеdocker psПосле просмотра команды видно, что мой контейнер es запущен:
Доступ в адресной строке браузераhttp://192.168.56.10:9200/, вы можете видеть, что es возвращает данные, подобные следующим, после успешного запуска:
Уведомление192.168.56.10это адрес моей виртуальной машины Linux, читатели должны получить доступ в соответствии с адресом своей виртуальной машины
Обратите внимание, обязательно192.168.56.10Измените его на свой собственный адрес виртуальной машины.
После завершения установки зайдите в адресную строку браузераhttp://192.168.56.10:5601/, вы можете видеть, что кибана успешно запущена:
Вы можете выбрать да или нет:
Используя наши собственные данные:
Интерфейс успешной установки:
Примечание: при посещенииhttp://192.168.56.10:5601/Когда появится следующее приглашение, вы можете подождать некоторое время, возможно, кибана не была успешно запущена.
также можно использоватьdocker logs kibanaДавайте посмотрим на журнал запуска кибаны, Следующий журнал показывает, что кибана запускается нормально:
3. Предварительный поиск
Все запросы к ES инкапсулированы как REST API, поэтому мы можем использовать postman для доступа к нему.
Используйте почтальон или введите путь запроса в адресной строке браузераhttp://192.168.56.10:9200/_cat/xxx
1. _кот
GET /_cat/nodes: просмотреть все узлы
GET /_cat/health: просмотреть состояние работоспособности es
GET /_cat/master: просмотреть главный узел
GET /_cat/indices: просмотреть все индексы; эквивалентно MySQLshow databases;
2. Индексировать документ (соответствует Mysql для сохранения записи)
Сохранить данные, где их сохранить索引какой из类型затем укажите, какой уникальный идентификатор использоватьPUT customer/external/1;
Сохраните данные № 1 во внешнем типе под индексом клиента как
PUT customer/external/1
{ "name":"lohn Doe" }
PUTиPOSTВсе будет хорошо; POSTДобавлен. Если идентификатор не указан, идентификатор будет сгенерирован автоматически. Указание идентификатора изменит данные и добавит номер версии; PUTЕго можно добавить или изменить. PUT должен указывать идентификатор, поскольку PUT должен указывать идентификатор, мы обычно используем его для модификации;
Введите в адресную строку почтальонаhttp://192.168.56.10:9200/customer/external/1, используя метод put, введите тело параметра:
{
"name":"lohn Doe"
}
Вы можете видеть, что запись была успешно создана:
После повторной отправки запроса я получаю следующий результат:
Таким образом, метод put можно использовать для добавления или обновления.
Отправить с помощью почтового метода в почтальонеhttp://192.168.56.10:9200/customer/external/Request, обратите внимание, что id отсутствует, а используются параметры в методе put выше.
Вы можете видеть, что запись была создана успешно, и es помог нам сгенерировать идентификатор:
Когда мы отправляем другой почтовый запрос с этим идентификатором, он становится операцией обновления:Таким образом, когда метод post не имеет идентификатора, это новое дополнение, когда идентификатор не существует, это также новое дополнение, когда идентификатор существует и данные существуют, это операция обновления.
Итак, вопрос в том, в чем разница между методами put и post? Разве это не сработает, если вы используете метод put для отправки запроса без идентификатора?
Видно, что использование метода put без запроса id сообщит об ошибке, то есть put не разрешен запрос без id, а post разрешен.
3. Запросить документы
3.1, получить данные запроса
GET customer/external/1
результат: { "_index": "клиент", // по какому индексу "_type": "внешний", //в каком типе "_id": "1", // идентификатор записи "_version": 4, //номер версии "_seq_no": 5, // Поле управления параллелизмом, каждое обновление будет +1, используется для оптимистичной блокировки "_primary_term": 1, // То же, что и выше, первичный осколок переназначается, при перезапуске он изменится "found": true, //указывает, что данные найдены "_source": { //Содержимое данных "name": "lohn Doe" } }
Обновление содержит ?if_seq_no=0&if_primary_term=1
Запрос с использованием метода get в почтальонеhttp://192.168.56.10:9200/customer/external/1, вы получите следующий результат:
Чтобы использовать оптимистическую модификацию блокировки, нам нужно добавить к пути запроса на размещение или публикацию?if_seq_no=0&if_primary_term=1поле;
Мы используем метод put в почтальоне для отправкиhttp://192.168.56.10:9200/customer/external/1?if_seq_no=0&if_primary_term=1запрос, параметр
{
"name":"update"
}
После выполнения операции ошибки обновления появляются следующие возвращаемые результаты:
Если мы используем последний серийный номер для обновления, он вернет успешное обновление со статусом 200:
4. Обновление документации
операция обновления
аргумент или заключение
POST customer/external/1/_update
{ "doc": { "name": "Jane Doe", "age": 20 } }
или ОТПРАВИТЬ customer/external/1
{ "name": "John Nash2" }
или ПОСТАВИТЬ customer/external/1
{ "name": "John Nash3" }
разные
Операция POST будет сравнивать данные исходного документа, если они совпадают, операции не будет, а версия документа и _seq_no не будут увеличиваться; Операция PUT всегда сохраняет данные и увеличивает версию; Сравните метаданные с _update и ничего не делайте, если они совпадают.
увидеть сцену
Для больших одновременных обновлений без обновления; Периодические обновления для больших одновременных запросов с обновлением; по сравнению с обновлениями пересчитать правила распределения.
Обновите и добавьте атрибуты POST customer/external/1/_update
{ "doc": { "name": "Jane Doe", "age": 20 } }
Обновите и добавьте атрибуты PUT&POST customer/external/1
{ "name": "John Nash2", "age": 40 }
использовать ремень_updateПочтовый запрос обновляет данные, которые отправляются с помощью метода post в почтальоне.http://192.168.56.10:9200/customer/external/1/_updateЗапрос, передача параметров:
{
"doc": {
"name": "John Nash"
}
}
Отправка запроса может привести к следующим результатам, и вы увидите, что обновление прошло успешно:
Отправьте запрос еще раз, вы можете увидеть, что если данные совпадают, сравните исходные данные и ничего не делайте так же, как оригинал,_version,_seq_noИ не изменится:
использовать不пояс_updateПочтовый запрос обновляет данные, которые отправляются с помощью метода post в почтальоне.http://192.168.56.10:9200/customer/external/1просить,
Параметры такие же, как и выше, вы видите, что данные будут обновляться каждый раз, когда вы нажимаете, и данные не будут проверены:
Обратите внимание, что для обновлений без _update вы можете использовать
{
"doc": {
"name": "John Nash",
"age":40
}
}
Также можно использовать:
{
"name": "John Nash2",
"age": 40
}
5. Удалить документы и индексы
удалить тип
метод или параметр пути
удалить документ
DELETE customer/external/1
падение индекса
DELETE customer
5.1, удалить документы
Отправить с помощью метода удаления в почтальонеhttp://192.168.56.10:9200/customer/external/1Запрос, вы можете увидеть следующие результаты, вы можете видеть, что удаление документа прошло успешно:
Повторная отправка запроса вернет статус 404.not_foundрезультат:
Запрос только что удаленного документа вернет"found": falseРезультат статуса 404:
5.2, удалить индекс
Отправить с помощью метода удаления в почтальонеhttp://192.168.56.10:9200/customerЗапрос, вы можете увидеть следующие результаты, вы можете видеть, что удаление индекса прошло успешно:
Повторная отправка запроса вернет статус 404.index_not_found_exceptionрезультат:
Запрос индекса, который вы только что удалили, вернетno such index [customer]Результат статуса 404:
Тогда возникает проблема, так как его можно удалить文档и索引, тогда можно удалить类型Шерстяная ткань?
В ES есть много типов под индексом, но ES не предоставляет метод для удаления типов.Если индекс будет удален, все типы будут удалены.
6. Массовый пакетный API
действовать
параметр
POST customer/external/_bulk
{"index" {"_id":"1"} {"name": "John Nash"}
{"index":"_id"2"} {"name": "Jane Nash"}
формат синтаксиса
{action: {metadata}}\n {request body}\n
{action: {metadata}}\n {request body}\n
сложный экземпляр POST /_bulk
{"delete":{"_index":"website","_type":"blog","_id":"123"}} {"create":{"_index":"website","_type":"blog","_id":"123"}} {"title":"My first blog post"} {"index":{"_index":"website","_type":"blog"}} {"title":"My second blog post"} {"update":{"_index":"website","_type":"blog","_id":"123"}} {"doc":{"title":"My updated blog post"}}
Чтобы использовать массовый пакетный API, нам нужно выполнить наши операции в кибане, Если запрос будет сделан в почтальоне, будет сообщено об ошибке:
Прежде всего, данные в нашем теле запроса больше не в формате json, мы используем текстовый формат, и будет сообщено о следующей ошибке:
Попробуем еще раз с json:
Приведенный выше формат json неверен, измените его и повторите попытку:Видно, что массовые пакетные операции не могут быть выполнены в postman, нам нужно работать в ранее установленной кибане.
Откройте консоль kibana и выберитеDevTools:
Появляется после нажатияDevToolsИнтерфейс работы с данными. Мы здесь, чтобы выполнять манипуляции с данными:
использоватьDevToolsДля выполнения пакетной операции вы можете увидеть следующие результаты:
Выполните сложную пакетную операцию:
POST /_bulk
{"delete":{"_index":"website","_type":"blog","_id":"123"}}
{"create":{"_index":"website","_type":"blog","_id":"123"}}
{"title":"My first blog post"}
{"index":{"_index":"website","_type":"blog"}}
{"title":"My second blog post"}
{"update":{"_index":"website","_type":"blog","_id":"123"}}
{"doc":{"title":"My updated blog post"}}
используется непосредственно над/_bulk, не указывает конкретный индекс, указывая на то, что он выполняется глобально в ES. Результат выполнения следующий:
Массовый API выполняет все в этом порядкеaction(действие).
Если одно действие по какой-либо причине не удается, оно продолжит обработку остальных действий, следующих за ним.
Когда массовый API вернется, он предоставит статус каждого действия (в том же порядке, в котором оно было отправлено), чтобы вы могли проверить, не завершилось ли данное действие ошибкой.
7. Образец тестовых данных
Я подготовил образец фиктивного документа JSON с информацией о банковском счете клиента. Каждый документ имеет следующую схему:
Выполнить тестовые данные в ESPOST bank/account/_bulk:
Если сложно скопировать данные на github, можно использовать данные, которые я скачал:accounts.json, или посетитеgitee-accounts.json
Можно использовать после созданияhttp://192.168.56.10:9200/_cat/indices, чтобы посмотреть на индекс в ES сейчас, вы можете увидеть, что индекс с банком имеет 1000 единиц данных:
4. Расширенный поиск
1. ПоискAPl
ES поддерживает два основных способа получения:
Один с помощьюREST request URIОтправить параметры поиска (uri+检索参数)
Другой - с помощьюREST requestbodyотправить их(uri+请求体)
1), получить информацию
Все поиски начинаются с _searchuri+检索参数:
запросить или вернуть
объяснять
GET bank/_search
Получить всю информацию о банке, включая тип и документы
GET bank/_search?q=*&sort=account_number:asc
Получение метода параметра запроса
Интерпретация результата ответа:
took
Время, затраченное Elasticsearch на поиск (в секундах)
time_out
Сообщите нам, если время поиска истекло
_shards
Сообщает нам, сколько осколков было обыскано, и подсчитывает осколки успешного/неудачного поиска.
hits
результаты поиска
hits.total
результаты поиска
hits.hits
массив фактических результатов поиска (по умолчанию 10 лучших документов)
sort
Ключ результата сортировки (ключ) (если не отсортирован по баллам)
оценка и max_score
Оценка релевантности и высшая оценка (для полнотекстового поиска)
HTTP-клиент (POSTMAN), запрос на получение не может содержать тело запроса, и то же самое верно, когда мы переходим на публикацию.Мы отправляем тело запроса в стиле JSON в _search APl. Следует понимать, что после возврата результатов поиска Elasticsearch завершает запрос и не поддерживает какие-либо серверные ресурсы или курсоры результатов (курсоры).
стиль языка запросов, который мы называемQuery DSL.
1), основной формат грамматики
Elastisearch предоставляет DSl в стиле Json (предметно-ориентированный язык), который может выполнять запросы. Это называется Query DSL.
Язык запросов очень всеобъемлющий и поначалу кажется немного сложным, но чтобы по-настоящему хорошо его изучить, нужно начать с нескольких простых примеров.
стиль языка запросов, который мы называемQuery DSL.
1), основной формат грамматики
Elastisearch предоставляет DSl в стиле Json (предметно-ориентированный язык), который может выполнять запросы. Это называется Query DSL.
Язык запросов очень всеобъемлющий и поначалу кажется немного сложным, но чтобы по-настоящему хорошо его изучить, нужно начать с нескольких простых примеров.
- запрос определяет, как запрашивать; - Тип запроса match_all [представляет все запросы], в es вы можете комбинировать множество типов запросов в запросе для выполнения сложных запросов. - В дополнение к параметру запроса мы также можем передать другие параметры, чтобы изменить результат запроса. Такие, как сортировка, размер; - from+size ограничен для выполнения функции подкачки; - сортировка сортировки, сортировка по нескольким полям, последующие поля будут сортироваться внутри, когда предыдущие поля равны, в противном случае преобладает предыдущий порядок
Наконец, запрашиваются все записи, содержащие в адресе слово Kings.При поиске строковых типов будет выполняться полнотекстовый поиск, и каждая запись имеет показатель релевантности.
bool используется для создания составных запросов:
Важно понимать, что составные операторы могут включать в себя любой другой оператор запроса, включая составные операторы.
Это означает, что составные операторы могут быть вложены друг в друга и могут выражать очень сложную логику.
must: все условия, перечисленные в must, должны быть соблюдены
Запросы, соответствующие документам, которые соответствуют логическим комбинациям других запросов. Логический запрос, сопоставленный с LuceneBooleanQuery. Он создается с использованием одного или нескольких логических предложений, каждое из которых имеет вхождение определенного типа. Тип возникновения:
происходить
описывать
must
Условие (запрос) должно появиться в соответствующих документах и будет способствовать подсчету баллов.
filter
Предложение (запрос) должно появиться в соответствующем документе. но не нравитсяmustОценки запросов будут игнорироваться. Предложение фильтра вконтекст фильтра, что означает, что оценка игнорируется, а предложение рассматривается для кэширования.
should
Пункт (запрос) должен появиться в соответствующих документах.
must_not
Пункт (запрос) не должен появляться в соответствующих документах. оговорка вконтекст фильтравыполняется в , что означает, что оценка игнорируется, а предложение рассматривается для кэширования. Из-за игнорирования баллов,0Таким образом, баллы за все документы будут возвращены.
Не все запросы должны давать оценки, особенно те, которые используются только для «подгонки» (фильтрации) документов. Чтобы не подсчитывать баллы, Elasticsearch автоматически проверит сцену и оптимизирует выполнение запроса.
Запрос, указанный под элементом фильтра, не влияет на оценку — оценка возвращается как 0. На оценки влияет только указанный запрос.
отmustПример запроса:
использоватьfilterзаменитьmustзапрос, следует отметить, что использованиеfilterрезультаты запроса иmustРезультаты запроса непротиворечивы, разница лишь в том, что нет оценки корреляции:
注意: если термин используется для извлечения текстовых значений, он будет выполнять не сегментацию слов, а точный поиск, поэтому он может не соответствовать данным:
Агрегация предоставляет данные из分组和提取数据Способность.
Простейший метод агрегации примерно равенSQL GROUP BYиSQL 聚合函数.
В Elasticsearch вы выполняете поиск, который одновременно возвращает совпадения и сводные результаты.
Возможность выделить все попадания в ответ. Это очень мощно и эффективно, вы можете выполнять запросы и множественные агрегации,
И получить их соответствующие (любые) результаты возврата за одно использование, используя чистый и упрощенный API, чтобы избежать обмена данными по сети.
Расширенное сложное агрегирование: найдите все распределения по возрасту, а также среднюю заработную плату M и F в этих возрастных группах и общую среднюю новую заработную плату в этой возрастной группе.
Тип счетчика токеновtoken_countИспользуется для подсчета количества терминов в строке
тип вложения
Ссылаться наmapper-attachmentsПлагин, который поддерживает индексирование вложений, таких как формат Microsoft Office, формат открытого документа, ePub, HTML и т. д.attachmentтип данных.
Тип экстракции (перколятор)
Принимает данные из доменных языков (query-dsl) запрос
В реляционных базах данных два представления данных независимы, даже если в них есть столбцы с одинаковым именем, это не влияет на использование, но в ES это не так. Elasticsearch — это поисковая система, разработанная на основе Lucene, и файлы с одинаковыми именами и разными типами в ES в конечном итоге обрабатываются в Lucene одинаково.
Два имени пользователя в двух разных типах на самом деле считаются одним и тем же файлом с одним и тем же индексом ES.Вы должны определить одно и то же сопоставление файлов в двух разных типах. В противном случае одни и те же имена полей в разных типах будут конфликтовать при обработке, что приведет к снижению эффективности обработки Lucene.
Удаление type необходимо для повышения эффективности обработки данных ES.
Эластичный поиск 7.x:
Параметр типа в URL является необязательным. Например, для индексирования документа больше не требуется тип документа.
Эластичный поиск 8.x:
Параметр type в URL больше не поддерживается.
解决:
1) Перенести индекс с многотипного на однотипный с независимым индексом для каждого типа документа.
2) Перенести все данные типа из существующего индекса в указанное место. Подробности см. в разделе перенос данных.
Одинtokenizer(Токенизатор) получает字符流, который делится на независимыеtokens(леммы, обычно отдельные слова), затем выводtokensпоток.
Например, пробелtokenizerРазделять текст при встрече с пробелами. будет текст "Quick brown fox!"разделить на [Quick,brown,fox!Приходить.
Долженtokenizer(Tokenizer) также отвечает за запись каждогоterm(вход) заказ илиpositionрасположение (дляphraseфразы иword proximityзапрос слова ближайшего соседа) иterm(запись) оригиналword(слово)start(начало) иend(законченныйcharacter offsets(смещение символа) (используется для выделения того, что нужно искать).
ElasticsearchСуществует множество встроенных токенизаторов, которые можно использовать для создания собственных анализаторов.
Протестируйте стандартный токенизатор ES по умолчанию:英文:
POST _analyze
{
"analyzer": "standard",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
中文:
POST _analyze
{
"analyzer": "standard",
"text": "pafcmall电商项目"
}
1), установить токенизатор ik
注意: Невозможно установить автоматически с установленным по умолчанию плагином elasticsearch install xxx.zip.
4.unzipСкачайте файл и разархивируйте
1), использоватьunzipраспаковыватьelasticsearch-analysis-ik-7.4.2.zipНаходитьunzipКоманда еще не установлена, сначала установите ееunzip
2), распакуйте файл вpluginsв каталогеikсодержание3) Удалить сжатый пакет и датьikДиректория и ее файловая авторизация
rm -rf *.zip
chmod -R 777 ik/
5. Вы можете подтвердить, установлен ли токенизатор
cd../bin
elasticsearch plugin list:即可列出系统的分词器
1), введите контейнер es в докер
2), перечислить токенизаторы системы
6. Перезапустите ES, чтобы токенизатор ik вступил в силу.
docker restart elasticsearch
2), протестировать токенизатор
使用默认分词:
POST _analyze
{
"analyzer": "standard",
"text": "pafcmall电商项目"
}
результат:
ik智能分词:
POST _analyze
{
"analyzer": "ik_smart",
"text": "pafcmall电商项目"
}
результат:
POST _analyze
{
"analyzer": "ik_smart",
"text": "我是中国人"
}
результат:
ik_max_word分词:
POST _analyze
{
"analyzer": "ik_max_word",
"text": "我是中国人"
}
результат:
Видно, что разные токенизаторы имеют очевидные различия в сегментации слов, поэтому при определении индекса в дальнейшем уже нельзя использовать сопоставление по умолчанию, сопоставление нужно создавать вручную, так как токенизатор нужно выбирать.
Сегментация слов по умолчанию в токенизаторе ik не может удовлетворить наши потребности.Для некоторых новых сетевых терминов токенизатор ik не сможет точно идентифицировать сегментацию слов, например:
POST _analyze
{
"analyzer": "ik_max_word",
"text": "乔碧萝殿下"
}
После сегментации слова оно отображается следующим образом, вы можете видеть, что токенизатор ik не может распознать, что «Qiao Biluo» — это имя человека:
Поэтому необходимо настроить тезаурус расширения.
Чтобы настроить и расширить тезаурус, вы можете изменить файл конфигурации токенизатора ik, указать удаленный тезаурус и позволить токенизатору ik отправить запрос на удаленное устройство, чтобы получить несколько последних слов, чтобы последние слова использовались в качестве последняя этимология.
Существует два способа реализации пользовательского тезауруса:
Внедрите услугу самостоятельно, обработайте запрос токенизатора ik и позвольте токенизатору ik отправить запрос в пользовательский проект.
Создайте сервер nginx, поместите последний тезаурус в nginx, пусть токенизатор ik отправит запрос в nginx, и nginx вернет последний тезаурус в токенизатор ik, чтобы токенизатор ik мог объединить исходный тезаурус и новый словарь.
Здесь я использую второй способ настройки тезауруса, вам нужно установить nginx перед созданием, пожалуйста, посетитеГлава шестаясвязанный контент.
существует/mydata/nginx/html/Создайте новый под путемesкаталог и создать новый тезаурусfenci.txt:
Примечание: если открытIKAnalyzer.cfg.xmlЕсли он искажен, вы можете сначала выйти из текущего файла и ввести его в командной строке.vi /etc/virc,
Затем в файл добавитьset encoding=utf-8, сохранить и выйти, снова открытьIKAnalyzer.cfg.xmlВот и все.
Снова выполните сегментацию слов в кибане, и вы увидите, что ранее нераспознанное «Qiao Biluo» теперь можно распознать как слово:
Если у нас появятся новые фразы в будущем, непосредственно в вышеуказанном пользовательском тезаурусеfenci.txtДобавьте его и перезапустите ES.
Так как ES был переустановлен при до этого установленном nginx, необходимо настроить службу автоматического запуска ES:docker update elasticsearch --restart=always
можно увидеть текущийSpingBoot(2.2.6)Версия, управляемая по умолчаниюESверсия иelasticsearch-rest-high-level-clientВерсии несовместимы:нужно изменитьpomфайл, пустьESиelasticsearch-rest-high-level-clientВерсия осталась прежней:
В предыдущем разделе реализовано создание индекса, в этом разделе попробуем функцию извлечения данных.
реализовать в коде搜索address中包含mill的所有人的年龄分布以及平均薪资Эта функциональность в кибане использует следующий оператор DSL:
3), выполните тестовый метод, результаты следующие:
Вы можете видеть, что естьboostПараметры, это автоматически добавляется системой для нас, что было недоступно, когда мы использовали язык DSL для извлечения данных в кибане раньше. тогда этоboostчто это?
Ссылаться наофициальная документация, можно сделать вывод.
Глядя на результаты запроса, вы можете использовать инструмент json для форматирования, и вы можете увидеть, что есть 4 возвращаемых данных, которые соответствуют условиям, которые соответствуют тем, которые были найдены в kibana ранее:
Выше приведено полное содержание интеграции SpringBoot с ES.Для более продвинутого использования вы можете обратиться к официальной документации ES, чтобы попробовать.
Конечно, ES широко используется в реальном производстве:
такие как использованиеELKкомпоненты используются для日志的收集или выполнить全文的检索:
или использовать收集异常信息, сделать визуальный интерфейс для анализа и т.д.:
Больше сценариев приложений необходимо сочетать с реальным производством, и нам также нужно попробовать и изучить их самостоятельно.
6. Приложение — Установка nginx
1. Переустановите ЕС
Перед установкой nginx нужно переустановить ES, так как максимальный параметр памяти установленного ранее ES 128M, при использовании будут разные проблемы, а сейчас изменено на 512M, самый быстрый способ удалить исходный контейнер, а потом перезапустить Создать.
Так не потеряются ли данные предыдущего ES? Ответ - нет. Поскольку я сопоставил каталог файлов при установке ES ранее, все файлы данных хранятся на виртуальной машине, а не в контейнере докеров.
доступhttp://192.168.56.10/, вы можете видеть, что сервер nginx был успешно установлен
Поскольку текущий nginx не указывает страницу по умолчанию, она будет отображаться при посещении403ошибка, это нормально
Если вы хотите установить страницу доступа по умолчанию, вы можете/mydata/nginx/htmlСоздайте новый в каталогеindex.htmlфайл с прикрепленным кодом: