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

ElasticSearch 基础

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风格端口

输入相应的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条件查询:

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

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

结果过滤,结果返回字段名为"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
          }
        }
      }
    }
  }
}

可视化界面安装

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内容,保存:




	IK Analyzer 扩展配置
	
	my.dic
	 
	
	
	
	
	

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

结果测试:

可以看到中国空间站已经是一个整体,是一个最小划分…

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/583817.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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