ElasticSearch完成最关键的一个功能就是 大数据搜索

官网:https://www.elastic.co/cn/elasticsearch/

简介

Elasticsearch 是一个分布式全文检索引擎

Lucene、Solr、ElasticSearch

  • Lucene

    • 是一套信息搜索工具jar包
    • 包括了:索引结构、读写索引的工具、排序、搜索规则等等工具类
    • 注意:不包括搜索引擎系统
  • Solr
    • 是基于Lucene做了一些封装和增强
    • 通过对外提供Web-service的API接口
  • ElasticSearch
    • 是基于Lucene做了一些封装和增强
    • 通过简单的Restful来隐藏Lucene的复杂性

安装

windows安装es

环境:jdk1.8及以上

官网中可以进行下载,但是因为是外网,速度是极其的慢。而且可能安装失败,所以我们可以通过官网找到你要下载的版本,然后通过华为云镜像去下载。(下方链接)

ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D

在windows上安装es,很方便解压即可使用

解压的目录结构如下

bin 启动文件
config 配置文件
log4j 日志配置文件
jvm.options java虚拟机相关配置
elasticsearch.yml es配置文件 默认:9200端口
lib 相关jar包
log 日志
modules 功能模块
plugins 插件 比如ik分词器

启动

双击bin\elasticsearch.bat

在网页中就可以访问 http://localhost:9200/

安装可视化界面 elasticsearch-head

除了下面的安装方法,你也可以在谷歌浏览器中安装插件elasticsearch head

环境:nodejs

下载地址:https://github.com/mobz/elasticsearch-head

下载完成后,尽量将ElasticSearch相关工具放在统一目录下

cd elasticsearch-head #到路径下
npm install -g nrm #全局安装nrm 如果没有安装过安装一下
nrm use taobao #切换镜像
npm install #安装依赖
npm run start #启动项目

启动

在网页中就可以访问 http://localhost:9200/

但是,出现了跨域问题

elasticsearch.yml文件中配置,解决跨域。注意由于yml的格式问题,冒号后面需要加空格。

修改好配置文件之后重新启动elasticsearch

http.cors.enabled: true
http.cors.allow-origin: "*"

安装kibana

kibana可以将elasticsearch的数据通过友好的界面展示出来,提供实时的分析功能。

官网下载慢,和elasticsearch一样的解决方法,华为云镜像:https://mirrors.huaweicloud.com/kibana/?C=N&O=D

注意:需要保证版本和elasticsearch的版本一致

下载完成后,尽量将ElasticSearch相关工具放在统一目录下

启动

双击bin目录下的kibana.bat

访问 http://localhost:5601

如果说,你在英文方面不太擅长,kibana是支持汉化的

编辑器打开kibana解压目录/config/kibana.yml,添加如下,然后冲洗kibana

i18n.locale: "zh-CN"

直接修改配置就可以实现汉化的原因是在kibana-7.10.0-windows-x86_64\x-pack\plugins\translations\translations中存在了zh-CN.json

ES核心概念

elasticsearch是面向文档。一切都是json。

传统的关系型数据库和elasticsearch进行对比

DB ElasticSearch
数据库 database 索引 indices
表 tables types
行 rows 文档 documents
字段 columns fields

elasticsearch中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档中又包含多个字段(列)。

IK分词器

分词:即把一段中文或者别的划分成一个个的关键字,默认的中文分词是将每个字看成一个词(不使用用IK分词器的情况下)。但是,这显然是不符合要求的,所以我们需要安装中文分词器ik来解决这个问题。

IK提供了两个分词算法: ik_smartik_max_word ,其中ik_smart最少切分, ik_max_word最细粒度划分!

下载

版本要与ElasticSearch版本对应

下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

安装

加压即可(但是我们需要解压到ElasticSearch的plugins目录下),然后压缩包进行删除

重启elasticsearch,可以看到加载了插件

测试

使用kibana的开发工具进行测试,注意:kibana开发工具执行的时候,需要将鼠标选中当前行,然后点击运行

从上面的例子中,感觉分词都比较正常,但是大多数,分词都满足不了我们的想法,如下例

那么,我们需要手动将该词添加到分词器的词典当中

添加自定义的词添加到扩展字典中

elasticsearch目录/plugins/elasticsearch-analysis-ik-7.10.0/config/IKAnalyzer.cfg.xml

我们会看到下面的内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict"></entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

将扩展字典进行修改,然后在和IKAnalyzer.cfg.xml的相同目录下,新建一个my.dic,添加字典

<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">my.dic</entry>

重启ElasticSearch,再次使用kibana测试

可以看到加载了my.dic

Rest风格

基本Rest命令说明

method url地址 描述
PUT(创建,修改) localhost:9200/索引名称/类型名称/文档id 创建文档(指定文档id)
POST(创建) localhost:9200/索引名称/类型名称 创建文档(随机文档id)
POST(修改) localhost:9200/索引名称/类型名称/文档id/_update 修改文档
DELETE(删除) localhost:9200/索引名称/类型名称/文档id 删除文档
GET(查询) localhost:9200/索引名称/类型名称/文档id 查询文档通过文档ID
POST(查询) localhost:9200/索引名称/类型名称/文档id/_search 查询所有数据

基本操作

1、创建一个索引,添加

PUT /test1/type1/1
{
"name":"DJ同学",
"age":22
}

2、字段数据类型

  • 字符串类型:text、keyword
  • 数值型:long、Integer、short、byte、double、float、half float、scaled float
  • 日期类型:date
  • 布尔类型:boolean
  • 二进制类型:binary
  • ...

3、指定字段的类型(使用PUT)

类似于建库(建立索引和字段对应类型),也可看做规则的建立

PUT /test2
{
"mappings":{
"properties":{
"name":{
"type":"text"
},
"age":{
"type":"long"
},
"birthday":{
"type":"date"
}
}
} }

4、获取3建立的规则

GET test2

5、获取默认信息

_doc 默认类型(default type),type 在未来的版本中会逐渐弃用,因此产生一个默认类型进行代替

PUT /test3/_doc/1
{
"name":"DJ同学",
"age":22,
"birthday":"2021-01-01"
} GET test3

7、删除

删除索引 DELETE /索引名/~类型名~/文档id 根据需求来判断是删除索引还是删除文档记录!

DELETE test1

8、新增数据

PUT /test4/user/1
{
"name":"张三",
"grade":"大一"
}

9、修改数据

你可以使用put的创建命令,直接覆盖。下面提供了最新的修改方法

POST /test4/user/3/_update
{
"doc":{
"name":"赵四"
}
}

10、简单查询数据

GET /test4/user/2

GET /test4/user/_search?q=name:"张三"

11、复杂的查询select(排序,分页,高亮,模糊查询,精准查询)

test4索引中的内容如下

查询匹配

  • sort 只能用于数字类型,而且所有的score会变成null
  • _source 过滤字段,默认显示所有字段
GET /test4/user/_search
{
"query":{
"match": {
"name":"三三"
}
}
,"_source": ["name","desc"]
,"sort":[
{
"age":{
"order":"asc"
}
}]
,"from": 0
,"size": 1
}

多条件查询(bool)

  • must 相当于 and
  • should 相当于 or
  • must_not 相当于 not (... and ...)
  • filter 过滤
GET /test4/user/_search
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"三"
}
}
,
{
"match":{
"age":9
}
}
]
}
}
} GET /test4/user/_search
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"三"
}
}
]
,"filter":{
"range": {
"age": {
"gte": 0,
"lte": 20
}
}
}
}
}
}

精确查询

  • term 直接通过 倒排索引 指定词条查询
  • 适合查询 number、date、keyword ,不适合text
GET /test4/user/_search
{
"query": {
"term": {
"name":"张三"
}
}
}

高亮查询

GET test4/user/_search
{
"query": {
"match": {
"name":"张三"
}
}
,
"highlight": {
"fields": {
"name": {}
}
}
}
// 自定义前缀和后缀
GET test4/user/_search
{
"query": {
"match": {
"name":"张三"
}
}
,
"highlight": {
"pre_tags": "<p class='key' style='color:red'>",
"post_tags": "</p>",
"fields": {
"name": {}
}
}
}

集成springboot

Java High Level REST Client 高级客户端api测试

官网学习api:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.x/java-rest-high.html

包括了索引和文档的CRUD,代码es-api https://gitee.com/dz138598/elasticsearch-study/tree/master/

实战

代码:https://gitee.com/dz138598/elasticsearch-study/tree/master/jd-project

ElasticSearch7.10.0入门学习的更多相关文章

  1. Bootstrap3.0入门学习系列

    Bootstrap3.0入门学习系列规划[持续更新]   前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...

  2. Json.Net6.0入门学习试水篇

    原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中 ...

  3. Bootstrap3.0入门学习系列教程

    可视化布局:http://www.runoob.com/try/bootstrap/layoutit/ 1.浏览器兼容性:你可以去看看大牛的一篇文章http://www.cnblogs.com/lhb ...

  4. 【数据售卖平台】—— Vue2.0入门学习项目爬坑

    前言:这个项目是我从零学习Vue2.0时用于练习基础知识的入门项目,包含了Vue2.0几乎所有项目都会用到的基础功能,是新手用来练手的好项目,这里温故知新对功能点做一个总结.github地址:http ...

  5. webpack3.10.0(入门系列基本概念1)

    一.概念 webpack的核心是一个用于现代JavaScript应用程序的静态模块打包程序.当webpack处理您的应用程序时,它会递归地构建一个依赖图,其中包含应用程序所需的每个模块,然后将所有这些 ...

  6. Bootstrap3.0入门学习系列规划[持续更新]

    详情请看http://aehyok.com/Blog/Detail/5.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:http ...

  7. Protege5.0.0入门学习

    OWL本体的重要组成部分 Individuals:个体,代表一个领域里面的对象.可以理解成一个类的实例(instances of classes). Properties:属性,是两个个体之间的双重联 ...

  8. Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation

    原文:Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. ...

  9. Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)

    原文:Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...

随机推荐

  1. @MockBean 注解后 bean成员对象为 null?

    笔者在写自测的时候遇到的问题: 我想模拟一个Bean,并在之后使用Mockito打桩,于是使用了 @MockBean 注解(spring集成mockito的产物),但代码编写好了后启动测试却报Null ...

  2. 以“有匪”为实战案例,用python爬取视频弹幕

    最近腾讯独播热剧"有匪"特别火,我也一直在追剧,每次看剧的时候都是把弹幕开启的,这样子看剧才有灵魂呀.借助手中的技术,想爬取弹幕分析下这部电视剧的具体情况和网友们的评论!对于弹幕的 ...

  3. 自己整理的acm模板

    第一次上传: 链接:点我下载 大部分常用的模板都弄了,剩下的坑以后再补... 第二次上传: 链接:点我下载 更新内容:新增ST表.分块 第三次上传: 链接:点我下载 更新内容:新增AC自动机,修改权值 ...

  4. golang 二维平面求多重遮挡三角形总面积

    解决问题描述:二维平面有很多三角形错落,可能会相互叠加落在一起,也可能互相远离.目标求出这些三角形的总占地面积. 我最开始想的解决方案是用总面积-总重叠面积 = 总占地面积.后来实现起来发现当面临多次 ...

  5. Nodejs学习笔记(4) 文件操作 fs 及 express 上传

    目录 参考资料 1. fs 模块 1.1 读取文件fs.readFile 1.2 写入文件fs.writeFile 1.3 获取文件信息fs.stat 1.4 删除文件fs.unlink 1.5 读取 ...

  6. Python中并发、多线程等

    1.基本概念 并发和并行的区别: 1)并行,parallel 同时做某些事,可以互不干扰的同一时刻做几件事.(解决并发的一种方法) 高速公路多个车道,车辆都在跑.同一时刻. 2)并发 concurre ...

  7. WM_CLOSE WM_QUIT WM_DESTROY 三者的区别

    一 个窗口或者应用程序应该被关闭时发出WM_CLOSE消息,当接收到WM_CLOSE消息时,如果你愿意,向用户提出是否真的退出.你知道让用户作确认或 有错误出现或有什么应该注意的事情发生的时候,往往弹 ...

  8. 在B站刷视频多倍速操作

    B站多倍数播放 1. 最初天真版 F12 或者笔记本(Fn+F12) console控制台 输入 document.querySelector('video').playbackRate = 4: - ...

  9. Androidd Studio 之多行文字跑马灯特效

    •效果展示图 •参考资料 两种方法实现TextView跑马灯效果(字体横向滚动) •出现的问题 新建 Java 文件继承 TextView 时出现问题: •解决方法 不应该继承 $TextView$ ...

  10. 自动获取IMC系统所有网络设备资产信息

    1 #coding=utf8 2 3 """ 4 CMDB接口调用 5 """ 6 import csv 7 import json 8 i ...