Установка ElasticSearch7
шаг
- перейти кЗагрузка с официального сайта, распаковать сразу после скачивания
Примечание:
1. Текущая версия 7.5.1, устанавливаемые позже плагины будут зависеть от версии es, а версию тоже можно указать по необходимости
2.es рекомендуется устанавливать в докер, для удобства демонстрации используется непосредственно версия для windows
- Войдите в каталог распаковки elasticsearch-7.5.1, войдите в каталог bin, дважды щелкните по elasticsearch.bat, чтобы запустить
- Чтобы убедиться, что запуск прошел успешно, вы можете напрямую получить доступ к порту 9200 в браузере.
- или другие инструменты для посещения
Общие команды
После успешного запуска вы можете выполнять команды операции в es через postman
1. Добавьте или обновите индекс и его документацию.
Способ 1 (рекомендуется): PUT /{index}/{document}/{id}, id обязателен, если такого id нет, то данные будут вставлены, а если есть id, то данные будут обновлены (если передается только индекс, индекс будет создан)
Способ 2: POST /{index}/{document}/{id}, id можно не указывать, если он не передан, он будет сгенерирован es
2. Получить все документы
ПОЛУЧИТЬ /{индекс}/{документ}/_поиск
как:http://127.0.0.1:9200/newindex/newdoc/_search
3. Получить указанный документ id
ПОЛУЧИТЬ /{индекс}/{документ}/{идентификатор}
как:http://127.0.0.1:9200/newindex/newdoc/1
4. Нечеткий запрос
GET /{индекс}/{документ}/_search?q=*ключевое слово*
как:http://127.0.0.1:9200/newindex/newdoc/_search?q=*ван*
5. Удалить документ
УДАЛИТЬ /{индекс}/{документ}/{идентификатор}
как:http://127.0.0.1:9200/newindex/newdoc/1
Другие предложения могут относиться кОфициальный сайт
инструмент визуализации
- Установите ElasticSearch-Head и загрузите исходный код
git clone https://github.com/mobz/elasticsearch-head.git
- Установите инструмент сборки проекта grunt глобально
npm install -g grunt-cli
- Установить зависимости
cd elasticsearch-head/
npm install
- Изменить файл конфигурации elasticsearch
vim ../elasticsearch-7.5.1/config/elasticsearch.yml
- Добавьте конфигурацию междоменного доступа, просто добавьте конец
http.cors.enabled: true
http.cors.allow-origin: "*"
- Запустить ElasticSearch-Head
cd - // 返回head根目录
grunt server
- Доступ браузера для просмотра: localhost:9100
ИК токенизатор
скачать
-
гитхаб скачатьс илиЗагрузите сжатый пакет напрямую, я выбрал второе
-
После распаковки скопируйте распакованную папку в каталог elasticsearch-7.5.1\plugins и переименуйте папку в ik
-
Проверьте китайский эффект токенизатора ik
Расширить содержимое пользовательского токенизатора
-
Создайте новый custom.dic в каталоге \elasticsearch-7.5.1\plugins\ik\config;
-
Добавьте свой собственный словарь;
-
Измените файл IKAnalyzer.cfg.xml в том же каталоге, чтобы указать пользовательский словарь для атрибута
;
- Перезапускаем elasticsearch, эффект следующий:
Интеграция SpringBoot
Подготовить
- добавить зависимости
Spring Data ElasticSearch
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
- добавить конфигурацию
spring:
data:
elasticsearch:
cluster-nodes: 127.0.0.1:9300
написание кода
- новый класс сущностей
@Data
@Accessors(chain = true)
@Document(indexName = "school", type = "student") // indexName为ES索引名,type为文档名
public class Student implements Serializable {
// id标识
// index=true代表是否开启索引,默认开启;
// type字段类型
// analyzer="ik_max_word"代表搜索的时候是如何分词匹配,为IK分词器最细颗粒度
// searchAnalyzer = "ik_max_word"搜索分词的类型
@Id
private String id;
@Field(type = FieldType.Keyword, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")
private String name;
private Integer age;
@Field(type = FieldType.Double)
private Double score;
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String info;
}
- объект разбивки на страницы
@Data
@Accessors(chain = true)
public class QueryPage {
/**
* 当前页
*/
private Integer current;
/**
* 每页记录数
*/
private Integer size;
}
- уровень сохраняемости данных
public interface EsRepository extends ElasticsearchRepository<Student, String> {
/**
* 根据学生姓名或信息模糊查询
*/
Page<Student> findByNameAndInfoLike(String name, String info, Pageable pageable);
}
- Интерфейс бизнес-уровня и его реализация
public interface EsService {
/**
* 插入
*/
void add(Student student);
/**
* 批量插入
*/
void addAll(List<Student> student);
/**
* 模糊查询
*/
Page<Student> search(String keyword, QueryPage queryPage);
}
@Service
public class EsServiceImpl implements EsService {
@Autowired
private EsRepository esRepository;
@Override
public void add(Student student) {
esRepository.save(student);
}
@Override
public void addAll(List<Student> student) {
esRepository.saveAll(student);
}
@Override
public Page<Student> search(String keyword, QueryPage queryPage) {
// es默认索引从0开始,mp默认从1开始
PageRequest pageRequest = PageRequest.of(queryPage.getCurrent() - 1, queryPage.getSize());
return esRepository.findByNameOrInfoLike(keyword, keyword, pageRequest);
}
}
- написать тестовый класс
@SpringBootTest
public class EsServiceImplTest {
@Autowired
private EsService esService;
@Test
public void insert() {
List<Student> students = new ArrayList<>();
for (int i = 10; i <= 12; i++) {
Student student = new Student();
student.setId(i + "").setAge(10 + i).setName("王二狗" + i).setScore(72.5 + i).setInfo("大王派我来巡山" + i);
students.add(student);
}
esService.addAll(students);
}
@Test
public void fuzzySearch() {
QueryPage queryPage = new QueryPage();
queryPage.setCurrent(1).setSize(5);
Page<Student> list = esService.search("二狗2", queryPage);
list.forEach(System.out::println);
}
}
Данные MySql в ElasticSearch
Установить
- Загрузка с официального сайта, обратите внимание на соответствующую версию es
настроить
- Разархивируйте сжатый пакет
- копировать
\logstash-7.5.1\config\logstash-sample.conf
В текущем каталоге переименуйте вlogstash.conf
- Измените его на следующую конфигурацию
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
jdbc {
# MySql连接配置
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/springboot_es?characterEncoding=UTF8"
jdbc_user => "root"
jdbc_password => "1234"
jdbc_driver_library => "D:\Develop_Tools_Others\logstash-7.5.1\mysql-connector-java-5.1.26.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
# SQL查询语句,用于将查询到的数据导入到ElasticSearch
statement => "select id,name,age,score,info from t_student"
# 定时任务,各自表示:分 时 天 月 年 。全部为 * 默认每分钟执行
schedule => "* * * * *"
}
}
output {
elasticsearch {
hosts => "localhost:9200"
# 索引名称
index => "school"
# 文档名称
document_type => "student"
# 自增ID编号
document_id => "%{id}"
}
stdout {
# JSON格式输出
codec => json_lines
}
}
- Создайте базу данных springboot_es, импортируйте скрипт базы данных
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_student
-- ----------------------------
DROP TABLE IF EXISTS `t_student`;
CREATE TABLE `t_student` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
`age` int(11) NULL DEFAULT NULL COMMENT '年龄',
`score` double(255, 0) NULL DEFAULT NULL COMMENT '成绩',
`info` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '信息',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_student
-- ----------------------------
INSERT INTO `t_student` VALUES (1, '小明', 18, 88, '好好学习');
INSERT INTO `t_student` VALUES (2, '小红', 17, 85, '天天向上');
INSERT INTO `t_student` VALUES (3, '王二狗', 30, 59, '无产阶级');
SET FOREIGN_KEY_CHECKS = 1;
бегать
- Сначала запустите ES, затем запустите Es-head
- Наконец, запустите logstash, команда запуска:
D:\Develop_Tools_Others\logstash-7.5.1>.\bin\logstash.bat -f .\config\logstash.conf
- Посетите localhost:9600, чтобы убедиться, что запуск прошел успешно.
- Проверьте консоль, чтобы увидеть, синхронизированы ли данные
- Наконец, вы можете смотреть es-head для просмотра синхронизированных данных.