ElasticSearch

全文检索

image-20220208145641826

简介

image-20220208145751910

Docker安装ElasticSearch

1.获取镜像

docker pull elasticsearch:7.14.0

2.运行es

docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.14.0

9300端口: ES节点之间通讯使用

9200端口: ES节点 和 外部 通讯使用

discovery.type=single-node:以单机模式启动

3.限制内存使用

进入容器内目录/usr/share/elasticsearch/config,编辑jvm.options文件

建议设置最大内存为服务器内存的一半,这里设置为1g

image-20220210153258499

4.重启后,访问ES

http://127.0.0.1:9200

Kibana

elasticsearch作为全文检索服务器,提供了restful风格的接口,可以使用postman等工具访问,但最好的选择是官方提供的Kibana客户端,提供了可视化统计分析等功能

简介

image-20220208155512640

Docker安装Kibana

1.获取镜像

docker pull kinbana:7.14.0

2.运行kibana

创建挂载目录,并设置文件权限为777

chmod 777 kibana.yml

启动容器

 docker run -d --name my_kibana -p 5601:5601 -v /home/vagrant/volum/kibana.yml:/usr/share/kibana/config/kibana.yml  kibana:7.14.0

3.进入容器

docker exec -it wdwdww bash

4.进入/usr/share/kibana/config文件夹,编辑kibana.yml文件

#
# ** THIS IS AN AUTO-GENERATED FILE **
#

# Default Kibana configuration for docker target
server.host: "0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://192.168.56.10:9200" ]
monitoring.ui.container.elasticsearch.enabled: true

将elasticsearch.hosts改为真实的elasticsearch地址

5.退出并重启容器

kibana访问地址:127.0.0.1:5601

6.使用图形界面中的dev-tool测试,出现以下结果代表kibana已成功链接elasticsearch

image-20220208165417185

三个核心概念

索引

image-20220209134851893

映射

image-20220209134919168

文档

image-20220209134934527

基本操作

索引的基本操作

索引的操作只有增加、删除和查询,没有修改

# 查看es索引 ?v代表显示列名
GET /_cat/indices?v

# 创建索引
PUT /products

# 创建索引时添加主数据块和副本数据块数量
PUT /products01
{
  "settings": {
    "number_of_shards": 1
    , "number_of_replicas": 0
  }
}

# 删除索引
DELETE /products

映射的基本操作

# 创建商品索引 指定mapping{id,title,price,create_time,description}
PUT /products
{
  "settings": {
    "number_of_shards": 1
    , "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "id":{
        "type": "integer"
      },
      "title":{
        "type": "keyword"
      },
      "price":{
        "type": "double"
      },
      "create_time":{
        "type": "date"
      },
      "description":{
        "type": "text"
      }
    }
  }
}

# 查看指定索引的映射信息
GET /products/_mapping

文档的基本操作

# 添加文档 手动指定id
POST /products/_doc/1
{
  "title":"iphone13",
  "price":9999.9,
  "create_time":"2011-12-11",
  "description":"iphone13跳楼大甩卖"
}

# 添加文档 自动生成id
POST /products/_doc/
{
  "title":"iphone13",
  "price":9999.9,
  "create_time":"2011-12-11",
  "description":"iphone13跳楼大甩卖"
}

# 查询文档 根据id
GET /products/_doc/1

# 删除文档 根据id
DELETE /products/_doc/2xc-4n4BrYqvbzk1umjf

# 更新文档(这种方式是先删除原有文档,再将更新文档插入)
PUT /products/_doc/1
{
  "title":"iphone13",
  "price":9999.9,
  "create_time":"2011-12-11",
  "description":"iphone13跳楼大甩卖"
}

# 更新文档(只更新指定字段)
POST /products/_doc/1/_update
{
 "doc":{
   "title":"华为手机"
 } 
}

文档的批量操作

# 文档的批量新增操作 
POST /products/_doc/_bulk
{"index":{"_id":2}}
{"title" : "华为手机","price" : 9999.9,"create_time" : "2011-12-11","description" : "iphone13跳楼大甩卖"}
{"index":{"_id":3}}
{"title" : "小米手机","price" : 9999.9,"create_time" : "2011-12-11","description" : "iphone13跳楼大甩卖"}
{"index":{"_id":4}}
{"title" : "苹果手机","price" : 9999.9,"create_time" : "2011-12-11","description" : "iphone13跳楼大甩卖"}



# 文档的批量新增、修改、删除操作
POST /products/_doc/_bulk
{"update":{"_id":2}}
  {"doc":{"title":"你是王八蛋"}}
{"index":{"_id":5}}
  {"title" : "黑米手机","price" : 9999.9,"create_time" : "2011-12-11","description" : "iphone13跳楼大甩卖"}
{"delete":{"_id":4}}

ps:文档的批量操作不具有原子性,批量操作时文档不支持换行

高级查询Quert DSL

image-20220210145911184

match_all——查询所有

# match_all关键字:查询所有  
GET /products/_search
{
  "query":{
    "match_all":{}
  }
}

term——关键词查询

# term关键字:使用关键词查询
# keyword、interger、double、date类型不分词,搜索使用全部搜索
# text类型搜索使用ES默认分词器,中文单字分词,英文单词分词
GET /products/_search
{
  "query": {
    "term": {
      "description": {
        "value": "卖"
      }
    }
  }
}

range——范围查询

# range关键字:范围查询
GET /products/_search
{
  "query": {
    "range": {
      "price": {
        "gt": 0,
        "lte": 10000
      }
    }
  }
}

prefix——前缀查询

# prefix关键字:前缀查询
GET /products/_search
{
  "query": {
    "prefix": {
      "title": {
        "value": "苹果"
      }
    }
  }
}

wildcard——通配符查询

# wildcard关键字:通配符查询  ?匹配一个任意字符,*匹配多个任意字符
GET /products/_search
{
  "query": {
    "wildcard": {
      "title": {
        "value": "?果*"
      }
    }
  }
}

ids——多id查询

# ids关键字:多id查询
GET /products/_search
{
  "query": {
    "ids": {
      "values": ["1","2","3"]
    }
  }
}

fuzzy——模糊查询

# fuzzy关键字:模糊查询
# fuzziness:允许出现偏差的个数
GET /products/_search
{
  "query": {
    "fuzzy": {
      "description": {
        "value": "跳楼了"
        , "fuzziness": 2
      }
    }
  }
}

bool——布尔查询

# bool关键字:模糊查询
# must:相当于&&同时成立
# should:相当于||成立一个即可
# must_not:相当于!不能满足
GET /products/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "ids": {
            "values": [1]
          }
        },
        {
        "range": {
          "price": {
            "gte": 10,
            "lte": 20
          }
        }  
      }
      ]
    }
  }
}

multi_match——多字段查询

# multi_match关键字:多字段查询
GET /products/_search
{
  "query": {
    "multi_match": {
      "query": "跳楼",
      "fields": ["title","description"]
    }
  }
}

query_string——默认字段分词查询

# query_string关键字:默认字段分词查询
# 查询字段分词就将查询条件分词,查询字段不分词那么查询条件也不分词
GET /products/_search
{
  "query": {
    "query_string": {
      "default_field": "description",
      "query": "熊大熊二来卖蜂蜜"
    }
  }
}

highlight——高亮查询

# highlight关键字:高亮查询
GET /products/_search
{
  "query": {
    "query_string": {
      "default_field": "description",
      "query": "熊大熊二来卖蜂蜜"
    }
  },
  "highlight": {
    "pre_tags": ["<span style = 'color:red;'>"],
    "post_tags": ["</span>"],
    "require_field_match": "false",
    "fields": {
      "*":{}
    }
  }
}

效果:image-20220210173753561

IK分词器

安装IK分词器

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

image-20220214102928587

解压后将解压文件丢进:/usr/share/elasticsearch/plugins 目录,重启容器即可

Ik分词器的使用

# IK分词器测试(粗略)
POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "中华人民共和国国歌"
}

# IK分词器测试(精细)
POST /_analyze
{
  "analyzer": "ik_max_word",
  "text": "中华人民共和国国歌"
}

扩展词与停用词配置

IK支持自定义扩展词与停用词配置

image-20220214104123897

配置扩展词

进入:/home/vagrant/volum/plugins/elasticsearch-analysis-ik-7.14.0/config 目录,编辑【IKAnalyzer.cfg.xml】文件

image-20220214105912201

创建对应的ext.dic和stop.dic文件,每一个关键字独占一行

image-20220214110006942

测试:

# IK分词器测试(粗略)
POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "马保国使用闪电鞭"
}

分词结果

image-20220214110125749

停用词配置同理

Filter Query过滤查询

image-20220214110333982

image-20220214110341458

常见的过滤类型有:term、terms、range、exits、ids等filter

GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        {"range": {
          "price": {
            "gte": 10,
            "lte": 99999
          }
        }}
      ],
      "filter": [
        {"term": {
          "title": "米"
        }}
      ]
    }
  }
}

PS:

在指定filter和query时,先执行filter再执行query

ES会自动缓存经常使用的过滤器,以加快性能

SpringBoot集成ElasticSearch

引入依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

创建配置类

@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {
        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo("192.168.56.10:9200")
                .build();
        return RestClients.create(clientConfiguration).rest();
    }
}

两种客户端对象

ElasticsearchOperations(对象形式)
RestHighLevelClient(restful风格,类似于kibana)推荐

SpringBoot整合Elasticsearch7基于RestHighLevelClient工具类:https://www.jianshu.com/p/55fb1d5992b2

聚合查询

image-20220214142125757

ElasticSearch常用查询及聚合分析:https://zhuanlan.zhihu.com/p/183816335
asticsearchClient() {
final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo(“192.168.56.10:9200”)
.build();
return RestClients.create(clientConfiguration).rest();
}
}


两种客户端对象

ElasticsearchOperations(对象形式)


RestHighLevelClient(restful风格,类似于kibana)推荐


SpringBoot整合Elasticsearch7基于RestHighLevelClient工具类:https://www.jianshu.com/p/55fb1d5992b2

# 聚合查询

[外链图片转存中...(img-Mq2euQSh-1644892049774)]

ElasticSearch常用查询及聚合分析:https://zhuanlan.zhihu.com/p/183816335

本科计算机bi-ye-she-ji辅导,远程安装运行+部署,欢迎各位小伙伴打扰~企鹅号:298-150-5753
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值