ElasticSearch(ES)学习笔记

1.概念

ES即为了解决原生Lucene使用的不足,优化Lucene的调用方式,并实现了高可用的分布式集群的搜索方案,其第一个版本于20102月出现在GitHub上并迅速成为最受欢迎的项目之一。

首先,ES的索引库管理支持依然是基于Apache Lucene(TM)的开源搜索引擎。

ES也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

 

ES的核心不在于Lucene,其特点更多的体现为:

 

分布式的实时文件存储,每个字段都被索引并可被搜索

 

分布式的实时分析搜索引擎

 

可以扩展到上百台服务器,处理PB级结构化或非结构化数据

 

高度集成化的服务,你的应用可以通过简单的 RESTful API、各种语言的客户端甚至命令行与之交互。

2.es区别于lucene

 

LuceneES联系,区别:项目中为啥使用ES而不用Lucene.

 

联系:ElasticSearch封装了Lucene,让使用变得更简单,在高可用上面做得更好。

 

区别:ElasticSearch除了拥有Lucene所有优点以外,还拥有自己优点.

 

     可用性:支持集群没有单点故障

 

     扩展性:支持集群扩展

 

     在集群环境使用:

 

ElasticSearch

 

   搜索引擎服务器,所有项目都统一访问索引服务器,可以支持在集群环境使用.

 

Lucene 搜索引擎工具包,必须集成到项目中使用,而在集群环境下,多个服务器都有自己Lucene文件,所以不统一. 不支持在集群环境使用

 

     支持多种语言:ElasticSearch支持很多语言,Lucene支持java

 

     简单性:ElasticSearch简单,都是http请求而Lucene复杂,都要调用API执行一大堆操作

 

一般lucene在中小型项目中使用(但是也能使用es),ES在大型项目中使用.因为ES支持在集群环境使用,并且自身也支持集群.

 

3.三大全文

luncene/es/solr

 

SolrES比较:

 

Solr 利用 Zookeeper 进行分布式管理,支持更多格式的数据(HTML/PDF/CSV),官方提供的功能更多在传统的搜索应用中表现好于 ES,但实时搜索效率低。

 

 ES自身带有分布式协调管理功能,但仅支持json文件格式,本身更注重于核心功能,高级功能多有第三方插件提供,在处理实时搜索应用时效率明显高于 Solr

4.es的安装

 

官方下载地址:https://www.elastic.co/downloads/elasticsearch

安装运行

修改jvm.options

 

 

 

 运行

访问测试

 ES集群已经启动并且正常运行.

 

5.客户端

 

客户端可以分为图形界面客户端,和代码客户端.

辅助管理工具Kibana5

Kibana5.2.2下载地址:https://www.elastic.co/downloads/kibana

② 解压并编辑config/kibana.yml,设置elasticsearch.url的值为已启动的ES

③ 启动Kibana5 : binkibana.bat

 

④ 默认访问地址:http://localhost:5601

Discover:可视化查询分析器

Visualize:统计分析图表

Dashboard:自定义主面板(添加图表)

TimelionTimelion是一个kibana时间序列展示组件(暂时不用)

Dev Tools Console(同CURL/POSTER,操作ES代码工具,代码提示,很方便)

Management:管理索引库(index)、已保存的搜索和可视化结果(save objects)、设置 kibana 服务器属性。

 

 启动运行访问

 

6.es的数据管理

--es的文档

ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。

 

_index:索引库,类似于关系型数据库里的“数据库”—它是我们存储和索引关联数据的地方。

_type类型,似于关系型数据库中表.在应用中,我们使用对象表示一些“事物”,例如一个用户、一篇博客、一个评论,或者一封邮件。可以是大写或小写,不能包含下划线或逗号。我们将使用 employee 做为类型名。

_id: _index  _type  组合时,就可以在ELasticsearch中唯一标识一个文档。当创建一个文档,你可以自定义 _id  ,也可以让Elasticsearch帮你自动生成。

另外还包括:_uid文档唯一标识(_type#_id)

_source:文档原始数据

_all:所有字段的连接字符串

 

--基本操作

添加

PUT dms/emp/1
{
  "id":1,
  "name":"sss",
  "age":13
}

查询
get dms/emp/_search

自定义id

POST dms/emp/
{
  "id":2,
  "name":"sss2",
  "age":13
}

#2:修改:a:先删除再插入
PUT crm/emp/1
{
  "id":1,
  "name":"ads",
  "age":18
}

#2:修改:b:局部修改
POST crm/emp/AWmjggiFZPiESvqs-mqR/_update
{
  "doc": {
    "id":1,
  "name":"xxx",
  "age":17
  }

}

#3:删除:a:指定一个document删除
DELETE dms/emp/1
#3:删除:b:删除整个索引,删库
DELETE dms

# 4:查询:a:指定一个document的id查询
GET dms/emp/1
# 4:查询:b:指定一个document的id查询,只需要返回数据:source
GET dms/emp/1/_source
# 4:查询:c:指定一个document的id查询,只需要返回指定key的数据:只返回source的name的值
GET dms/emp/1/_source?_source=name

 

#5.1不同索引不同类型的数据

GET _mget
{
  "docs":[
    {
  "_index":"dms",
  "_type":"emp",
  "_id":"1"
},{
  "_index":"dms",
  "_type":"emp",
  "_id":"2"
}
    ]
}
#5.2:同一个索引和类型

GET dms/emp/_mget
{
  "ids":[1,2,3]
}
#6.1: 查询所有的索引数据
GET _search
#6.2:指定索引和分类的查询
GET dms/emp/_search

#size :每页多少条 默认是10;   from:从哪里开始,默认从0开始

GET dms/emp/_search?size=2&from=1

字符串查询

GET dms/emp/_search?q=age:11
es的查询:TO必须大写;多个条件使用&拼接;排序:默认是升序asc


GET dms/emp/_search?q=age[10 TO 13]&sort=id:desc&size=2&from=0

6.dsl查询与过滤

 -- 什么是DSL查询

ES提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。

DSL(Domain Specific Language特定领域语言)JSON请求体的形式出现

查询字符串模式GET dms/emp/_search?q=name:文兵 简单查询

DSL模式 复杂查询

GET dms/emp/_search

{

"query" : {

   "match" : {

    "name" : "sss"

}

}

}

 

 

 

7.分词与映射

1) 集成合适分词器-ik

        在服务端通过插件集成分词器

2) 要设置字段的分词器

        通过客户端告诉es某个字段要使用某个分词

 

ESIK分词器插件源码地址:https://github.com/medcl/elasticsearch-analysis-ik

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/wgyi140724-/p/10577030.html