ElasticSearch使用

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

安装

#选择macOS版本下载 解压
tar -zxvf elasticsearch-7.15.1-darwin-x86_64.tar.gz

# 
cd elasticsearch-7.15.1/bin/
sh elasticsearch
# 报错:查看解压目录 发现jdk.app大小为0  重新解压
could not find java in bundled JDK at /Users/mpy/tools/elasticsearch-7.15.1/jdk.app/Contents/Home/bin/java

image

访问localhost:9200

后台运行es

nohup nice sh elasticsearch &

目录结构

bin : 启动文件
config : 配置文件
	log4j2 :  日志配置文件
	jvm.options : java虚拟机相关配置
	elasticsearch.yml : elasticsearch配置文件,默认9200端口
lib : 相关jar包
modules :  功能模块
plugins : 插件

安装ES可视化界面

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

git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install

# npm速度慢 使用淘宝的镜像
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
# 查看cnpm命令是否生效
cnpm -v 
cnpm install

npm run start

# 测试 访问 localhost:9100 发现存在跨域问题

# 修改 elasticsearch.yml 
http.cors.enabled: true
http.cors.allow-origin: "*"

# 重启elasticsearch

image

安装Kibana

下载地址:https://www.elastic.co/cn/start

# 启动
cd kibana-7.15.1-darwin-x86_64/bin
sh kibana

# 访问测试
http://localhost:5601

image

找到dev-tools ,之后的所有操作都在这里执行。

汉化:

# 找到如下目录 kibana已经对应准备好了汉化
kibana-7.15.1-darwin-x86_64/x-pack/plugins/translations/translations/zh-CN.json

# 设置汉化
kibana-7.15.1-darwin-x86_64/config/kibana.yml

# 添加配置后重启kinaba
i18n.locale: "zh-CN"

ES核心概念

ES是面向文档的,一切都是JSON
关系型数据库与ES对比:

Relational DB ES
数据库(database) 索引(indices)
表(tables) 类型(types)
行(rows) 文档(documents)
字段(columns) fields

IK分词器

下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.15.1
将解压出来的文件放到elastic search 的 plugins中

Exception in thread "main" java.nio.file.NotDirectoryException: /Users/mpy/tools/elasticsearch-7.15.1/plugins/.DS_Store

# 进入plugins目录
ls -a 
# 删除.DS_Store
rm -rf .DS_Store

# 查看加载的插件
sh elasticsearch-plugin list

# 使用Kibana测试

分词测试

image

ik_smart为最少划分;ik_max_word为最细粒度划分,穷尽词库所有可能

添加自定义分词

# 查看分词配置 
elasticsearch-7.15.1/plugins/ik/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>

# 在config中新建自己的dic分词文件 加入配置中即可

基本操作

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/索引名称/类型名称/_search 查询所有数据

测试

创建索引

PUT /test/type1/1
{
  "name":"深圳南山第一小学",
  "grade": "1,2"
}

image
image

索引规则

如果自己的文档字段没有指定类型,es会默认配置字段类型

PUT /test2
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "grade": {
        "type": "text"
      },
      "createdAt" :{
        "type": "date"
      }
    }
  }
}

image

获取信息

# 获取索引信息
GET test2

# 通过_cat可以获取ES当前的信息
GET _cat/indices?v

image

修改索引

  • PUT更新
PUT /test/_doc/1
{
  "name":"深圳南山第二小学",
  "grade":"1,2,3",
  "createdAt":"2021-10-28 13:22:00"
}

image

  • POST更新
POST /test/_doc/1/_update
{
  "doc" : {
     "name":"深圳南山第三小学",
    "grade":"1,2,3",
    "createdAt":"2021-10-28 13:22:00"
  }
 
}

image

PUT方法如果没有设置值 会把之前数据修改为空。推荐使用POST方法更新数据

删除索引

通过url判断是删除索引还是删除文档

DELETE /test2

条件查询

GET /test/type1/_search?q=name:宝安小学

数据类型

官方地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html#_multi_fields_2

posted @ 2021-10-27 20:05  狻猊的主人  阅读(171)  评论(0编辑  收藏  举报