栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ElasticSearch

ElasticSearch

全文检索

简介

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

4.重启后,访问ES

http://127.0.0.1:9200

Kibana

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

简介

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

三个核心概念 索引

映射

文档

基本操作 索引的基本操作

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

# 查看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

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": [""],
    "post_tags": [""],
    "require_field_match": "false",
    "fields": {
      "*":{}
    }
  }
}

效果:

IK分词器 安装IK分词器

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

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

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

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

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

配置扩展词

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

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

测试:

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

分词结果

停用词配置同理

Filter Query过滤查询

常见的过滤类型有: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

引入依赖


            org.springframework.boot
            spring-boot-starter-data-elasticsearch

创建配置类

@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

聚合查询

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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/742956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号