初识ElasticSearch


学习目标

  • 安装ElasticSearch
  • 安装Kinbana
  • 掌握ElasicSearch基础语法
    • 索引操作
    • 文档操作
    • 查询操作

前言

在Linux中安装ES

例如:Elasticsearch本质是一个java语言开发的web项目,我们可以通过RESTful风格的接口访问该项目内部的Lucene,从而让全文搜索变得简单。


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装ES

准备工作

  • 准备一台搭载Centos7系统的虚拟机,并使用xshell远程连接
  • 关闭防火墙,放便访问ES
  • 配置最大可创建文件数大小
# 关闭防火墙
systemctl stop firewalld.service
# 禁止防火墙自启动
systemctl disable firewalld.service
# 打开系统配置文件
 vim /etc/sysctl.conf
 # 添加以下配置
 vm.max_map_count=655360
 # 使配置文件生效
 sysctl -p
  • 由于ES服务不能由root用户运行,此时我们需要创建一个非root用户,这里以es(用户)举例
useradd es
  • 解压es压缩包并放到到/usr/local/目录下
# 解压
tar -zxvf es压缩包 -C /usr/local/
  • 到这里es服务我们已经安装好了,接下来启动es服务
cd /usr/local/elasticsearch/bin/
# 前台方式运行
./elasticsearch
# 后台方式运行
./elasticsearch -d

注意事项:
ES使用JAVA语言编写的,在ES7版本之前,我们还需要配置JAVA环境变量,但在ES7版本(一次大的版本升级)之后在ES内部已经封装好了JAVA环境变量
ES不能以root用户运行,我们需要新建一个非root用户,并赋予其操作es的权限

二、安装Kibana

1.Kibana介绍

Kibana是一款开源的数据分析和可视化平台,设计用户和ElasticSearch协作

2.安装

# 解压
tar -zxvf kibana压缩包 -C /usr/local/ 
# 因为kibana是和es相互协作的,需要在配置文件中指定es的ip地址以及端口
cd /usr/local/kibana/config/
vim kibana.yml
# 添加以下配置
server.host:"kibana主机ip"
elasticsearch.hosts:["elasticsearch主机ip"]

注意事项:
Kibana和es相同,都不能以root用户运行,我们需要新建一个非root用户,并赋予其操作kibana的权限

三、kibana客户端

  • 出现以下页面说明es以及kibana服务启动成功
    在这里插入图片描述
    在这里插入图片描述

四、ElasticSearch索引操作

  • ElasticSearch是一个全文检索服务器,用于搜索非结构化数据
    • 那什么是结构化数据,什么是非结构化数据呢?
    • 结构化数据:具有固定格式和固定长度的数据,如数据库中的字段
    • 非结构化数据:指格式和长度不固定的数据
  • ElasticSearch是一个Restful风格的数据分析引擎
  • 编码格式遵循Restful风格

创建索引

  • 创建student索引
  • 索引相当于数据库中的table
PUT /student
{
	"mappings":{
		"properties":{
			"id":{
				"type":"integer"
			},
			"name":{
				"type":"text"
			}
		}
	}
}

删除索引

  • 删除student索引
DELETE /student

五、ElasticSearch文档操作

新增修改文档数据

  • 新增student中id、name域的值
POST /student/_doc/1
{
	"id":1.
	"name":"名字"
}

注意:
POST /student/_doc/1 这个1是索引id而不是文档中中的域(id),如果不指定索引id的话id会自动生成一段字符串

根据id查询文档

GET /student/_doc/id值

根据id删除文档

DELETE /student/_doc/id值

域的属性

  • type:指定域的类型

注意:text是带有分词的字符串,keyword是不带有分词的字符串

  • index:该域是否创建索引,只有设置为true才能根据域的关键词查询文档(也就是开启了倒排索引)
  • store:是否单独存储
  • analyzer:使用的分词器
    • ElasticSearch默认使用的分词器是standard analyzer
    • 如果需要使用第三方分词器,可以使用ik以及pinyin分词器
      举例:
  • 创建student索引,其中的域有(id,name,info)其中name和info需要创建索引并使用ik分词器,以及单独存储
  • 新增文档数据、查询单独存储的数据
PUT /student
{
  "mappings": {
    "properties": {
      "id":{
        "type":"integer",
        "store": true
      },
      "name":{
        "type":"text",
        "index": true,
        "store": true,
        "analyzer": "ik_smart"
      },
      "info":{
        "type": "text",
        "index": true,
        "store": true,
        "analyzer": "ik_smart"
      }
    }
  }
}
POST /student/_doc/1
{
  "id":1,
  "name":"张三",
  "info":"张三正在学习ElasticSearch"
}

GET /student/_search
{
  "stored_fields": ["name","info"]
}

六、分词器

  • ElasticSearch默认的分词器是standard analyzer
    • 该分词器会根据空格以及英文符号进行分词,会进行英文的大小写转换(对大小写不敏感)
      测试:
GET /_analyzer
{
	"text":"Test the text",
	"analyzer":"standard"
}

ik分词器

  1. ik分词器根据词典进行分词,词典在ik分词器的config目录下
<?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">ext_dict.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords">ext_stopwords.dic</entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

  1. 重启ES以及Kibana服务
  2. 测试ik分词器效果
# 这里analyzer也可以设置城ik_max_word
# ik_max_word比_ik_smart分的词更多更细致
GET /_analyzer
{
	"text":"测试分词器",
	"analyzer":"ik_smart"
}

自定义分词器

  • 在真实开发中,我们可能即会进行拼音分词又会进行文字分词,此时我们需要自定义分词器
  • 在创建索引的时候自定义分词器
PUT /student
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_pinyin":{
          "tokenizer":"ik_max_word",
          "filter":"pinyin_filter"
        }
      },
      "filter": {
        "pinyin_filter":{
          "type":"pinyin",
          "keep_separate_first_letter" : false, 
          "keep_full_pinyin" : true, 
          "keep_original" : true, 
          "remove_duplicated_term" : true 
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "name":{
        "type":"text",
        "index": true,
        "analyzer": "ik_pinyin"
      },
      "age":{
        "type":"integer"
      }
    }
  }
}
# 测试自定义分词器
GET /student/_analyzer
{
	"text":"你好自定义分词器",
	"analyzer":"自定义分词器名"
}

温馨提示:
自定义分词详细属性请浏览Githup官网
https://github.com/medcl/elasticsearch-analysis-pinyin

七、文档查询

查询所有域

- 到这里大家对`ElasticSearch`已经有一定的了解了,这个student(索引),match_all(搜索方式),学过mysql的小伙伴应该知道这个相当于mysql中的`select * from student`
GET /student/_search
{
	"query":{
		"match_all":{}
	}
}

全文检索match

- 这里以student中的info字段举例
GET /student/_search
{
	"query":{
		"match":{
			"info":"初始全文检索"
		}	
	}
}

注:在搜索时,关键字可能会输入错误,ES提供了自动纠错的功能

范围搜索

  • 这里以student中的id举例
    • 相当于sql语句中的SELECT * FROM student WHEREid >= 1 and id <= 5
GET /student/_search
{
	"query":{
		"id":{
			"gte":1,
			"lte":5
		}
	}

}

温馨提示:
这个range只能对数字类型的字段进行范围搜索

  • match_phrase短语检索,搜索条件不进行任何分词解析

温馨提示:
match_phrase与ma在这里插入代码片match不同的是,match会对搜索条件进行分词解析(standard analyzer/ik_smart/ik_max_word/pinyin/自定义分词)

  • 这里以student中的info举例
GET /student/_search
{
	"query":{
		"match_phrase":{
			"info":"短语检索"
		}		
	}
}
  • term/term单词/词组搜索,搜索条件不做任何分词解析
  • 这里以student中的info字段举例
# 单词搜索
GET /student/_search
{
	"term":{
		"info":"单词搜索"
	}
}
# 词组搜索
GET /student/_search
{
	"terms":{
		"info":["词组","搜索"]
	}
}

总结

  1. 以上就是今天要讲的内容,本文仅仅简单介绍了ElaticSearch的使用,而通过ElasticSearch我们可以实站全栈搜索,分析日志等功能。
  2. 总之ElasticSearch是一个功能强大的搜索和分析引擎,可以帮助用户快速的存储,搜索和分析大规模的数据,ElasticSearch具有高可拓展性、高可用性、高性能和易用性等优点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿晓晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值