ElasticSearch 基础

ElasticSearch 基础

持续更新…


什么是ElasticSearch?
Elasticsearch 是一个高扩展的分布式全文检索免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。
Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。
ES是利用Java开发并且是当前最流行的开源企业级搜索引擎。能够达到实时搜索,稳定,可靠,快速,安装使用方便。

ElasticSearch安装

官方下载地址

在这里插入图片描述

ES启动这个有点占用内存…

9300端口为ElasticSearch集群间组件的通信端口,9200端口为浏览器访问的HTTP协议的RESTful风格端口

z

输入相应的URL,结果为:

在这里插入图片描述
读者可以直接在/config目录下的jvm.options文件中修改JVM虚拟内存配置:

-Xmx1g
-Xmx1g

在这里插入图片描述

基本概念

ElasticSearch与关系型数据库对比(8.x版本及以上版本将废弃Type…):

在这里插入图片描述

什么是倒排索引?
在倒排索引中关键词主键,每个关键词都对应着一系列文件,这些文件中都出现了这个关键词。这样当用户搜索某个关键词时,排序程序在倒排索引中定位到这个关键词,就可以马上找出所有包含这个关键词的文件。

简单使用

基本Rest命令:

在这里插入图片描述

PUT方式创建索引(遵循幂等性):

http://localhost:9200/test

在这里插入图片描述

在这里插入图片描述

PUT方式创建特定映射类型的索引(遵循幂等性):

PUT /students
{
  "mappings": {
    "properties": {
      "naem": {
        "type": "text"
      },
      "age": {
        "type": "long"
      },
      "grade": {
        "type": "text"
      },
      "date": {
        "type": "date"
      }
    }
  }
}

在这里插入图片描述

PUT方式创建文档(遵循幂等性):

如果文档字段没有指定,那么ES会自动的配置属性…

PUT /test/_doc/1
{
  "name":"张三",
  "age": 20,
  "date": "2021-10-19"
}

在这里插入图片描述

GET方式获取索引信息:

http://localhost:9200/test

在这里插入图片描述

在这里插入图片描述
DELETE方式删除索引:

http://localhost:9200/test

在这里插入图片描述

DELETE删除文档:

http://localhost:9200/test/_doc/2000

POST方式添加文档(默认不遵循幂等性):

在这里插入图片描述

在这里插入图片描述

POST方式添加自定义_id的文档:

http://localhost:9200/students/_doc/2000

{
	"name":"张三",
	"age":"20",
	"grade":"一班"
}

在这里插入图片描述

GET方式主键查询文档:

http://localhost:9200/students/_doc/2000

在这里插入图片描述

GET方式全查询所有文档:

http://localhost:9200/students/_doc/_search

在这里插入图片描述

PUT方式全量修改文档:

http://localhost:9200/students/_doc/2000

{
	"grade":"三班"
}

在这里插入图片描述

POST方式局部修文档字段信息(或者新增字段…):

http://localhost:9200/students/_update/2000

{
	"doc":{
		"grade":"三班"
	}
}

在这里插入图片描述

GET条件查询:

term: 精确查询
match: 使用分词器查询

结果分词匹配,只查询"name"字段带有"一"和”班“值的所有文档

GET /students/_doc/_search
{
  "query":{
    "match": {
      "grade": "一班"
    }
  }
}

在这里插入图片描述
结果精确匹配,返回name包含"张四"的所有文档

GET /students/_search
{
  "query": {
    "term": {
      "name": "张四"
    }
  }
}

在这里插入图片描述

结果过滤,结果返回字段名为"name"的文档

GET /students/_doc/_search
{
  "query":{
    "match": {
      "grade": "一班"
    }
  },
  "_source": ["name"]
}

在这里插入图片描述

结果排序,按照降序排序(升序排列为"asc")输出

GET /students/_doc/_search
{
  "query":{
    "match": {
      "grade": "一班"
    }
  },
  "sort":{
    "age":{
      "order":"desc"
    }
  }
}

在这里插入图片描述

分页查找,页从0开始,页面大小为2

GET /students/_doc/_search
{
  "query":{
    "match": {
      "grade": "一班"
    }
  },
  "from": 0,
  "size": 2
}

在这里插入图片描述

多条件查询,查询所有"name"字段包含"张",“三”,并且"grade"字段包含"一","班"的所有文档(should字段具有’or’的意思,must_not字段是must字段的补集… )

GET /students/_doc/_search
{
  "query":{
    "bool": {
      "must": [
          {
            "match":{
              "name":"张三"
            }
          },
          {
            "match":{
              "grade":"一班"
            }
          }
      ] 
    }
  }
}

在这里插入图片描述

区间查询,查找所有"age"字段大于20并且小于25的文档(lt字段是小于,gte大于等于,lte小于等于)

GET /students/_search
{
  "query":{
    "bool": {
      "filter": {
        "range":{
          "age": {
            "gt": 20,
            "lt": 25
          }
        }
      }
    }
  }
}

在这里插入图片描述

高亮显示,对所有desc属性包含了"三"进行高亮显示

GET /students/_search
{
  "query": {
    "match": {
      "desc": "三"
    }
  },
  "highlight": {
    "fields": {
      "desc": {}
    }
  }
}

在这里插入图片描述
高亮显示,对所有的包含了"三"的desc属性进行添加自定义标签

GET /students/_search
{
  "query": {
    "match": {
      "desc": "三"
    }
  },
  "highlight": {
    "pre_tags": "<p style='color:red'>", 
    "post_tags": "</p>", 
    "fields": {
      "desc": {}
    }
  }
}

在这里插入图片描述

可视化界面安装

Elasticsearch-Head

首先需要安装Node.js以及npm(版本尽量不能太高),然后才能安装该插件…

git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install # 依赖包下载
npm run start # 启动

结果:

在这里插入图片描述

跨域问题解决:

进入elasticsearch安装目录下的config,找到elasticsearch.yml文件,添加内容

## 跨域问题解决 ##

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

在这里插入图片描述

Kibana
简单地说,就是开源的数据分析和可视化平台…

官方下载地址

安装路径下的bin目录下执行kibana.bat文件启动

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

修改为母语(config/kibana.yml):

i18n.locale: "zh-CN"

IK分词器插件

什么是IK分词器?
分词:即把一段中文或者别的词汇分成一个一个的关键字,我们在搜索时会把自己的信息进行分词,会把数据库中或索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个词,当时这显然不合理,如:“给岁月以文明"会被分为"给”,“岁”,“月”,“以”,“文”,“明”,这个时候就需要IK分词器来解决这个问题…

Github下载地址

下载后放入到elasticsearch中的plugins目录然后重启ES即可

在这里插入图片描述

  • ik_smart分词方式

在这里插入图片描述

  • ik_max_word分词方式

在这里插入图片描述

自定义分词器分词配置

进入到IK分词器的config目录下,创建==.dic==后缀文件:

在这里插入图片描述

添加内容到my.dic,保存:

在这里插入图片描述
修改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">my.dic</entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

最后记得不要忘记重启ES了…

结果测试:

可以看到中国空间站已经是一个整体,是一个最小划分…
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值