Elasticsearch——上

什么是Elasticsearch(下面简称ES)?

lucene是我们上一篇博客讲过的全文检索技术,为了实现全文检索的分布式结构,我们接下来需要学习的是ES。ES是一个基于lucene实现的搜索服务.当客户端调用es的功能时,可以实现全文检索的各种操作,并且不需要关心lucene的底层代码.只要客户端支持http协议就可以了。

ES的结构:

在这里插入图片描述
接口层:这里可以看出,es结构接收的是REST风格的URL。
存储层:支持分布式存储,可以在本地也可以在其他服务器。

单节点的ES:

ES的索引文件结构:

1.创建索引:
在Linux中使用:
curl -XGET url:curl -XPUT http://127.0.0.1:9200/index01,以index01为名字,创建第一个es的索引文件,没有数据库空的
curl -XPOST url:-d 添加请求体数据,所以可以写为curl -XPOST -d ‘请求体数据’ url。

2.索引结构:
es默认对每一个索引文件都计算分片,5个分片.每一个数据分片都是一个完整的lucene创建的索引。
白色为主节点,每个主节点都会有一个对应的从节点。
在这里插入图片描述
会根据document的id值进行hash取 对5取余,每一个document都会对应0-4号分片其中的一个,把document存入分片中。
需要注意的是:这里的索引并不是lucene中的倒叙索引,它不是用分词器做的,而只是单纯的把document存入这个索引中,存入之后怎么做分词操作,后面会叙述。

使用ES 通过http协议操作——索引管理

创建索引:

curl -XPUT http://10.9.48.69:9200/index01
新增一个叫做index01的索引.

查询一个和多个索引的基本信息 :

curl -XGET http://10.9.48.69:9200/index01(一个)
curl -XGET http://10.9.48.69:9200/index01,index02(多个)

删除索引

curl -XDELETE http://10.9.48.69:9200/index02

打开关闭索引

关闭
#curl -XPOST http://10.9.48.69:9200/index01/_close
打开
#curl -XPOST http://10.9.48.69:9200/index01/_open

使用ES 通过http协议操作——文档(document)管理

任何一个索引文件中都需要保存大量的document文档;客户端连接es的服务器,传递给es一批文档数据,es才会按照要去写入到索引中

新增文档到索引:

curl -XPUT -d ‘{“id”:10,“title”:“es简介”,“content”:“es好用好用真好用”}’ http://10.9.48.69:9200/index01/article/1
id:1
title:es简介
content:es好用好用真好用

注意后面的url:http://10.9.48.69:9200/index01/article/1
分别代表:http://eshttp协议端口/已存在索引/type类型/自定义文档id

这里说明一下type类型,和数据库中的table类似,是一个规定,规定这个类型的document叫什么名字。

获取单个和多个文档:

单个文档
确定文档位置的3个坐标属性 index type id
curl -XGET http://10.9.48.69:9200/index02/article/1

查询结果:

{
  "_index": "index02",
  "_type": "article",
  "_id": "1",
  "_version": 1,
  "found": true,
  "_source": {
    "id": 10,
    "title": "es简介",
    "content": "es好用好用真好用"
  }
}

获取多个文档
需要在请求体中,携带三个坐标属性作为参数
curl -XGET -d ‘{“docs”:[{"_index":“index02”,"_type":“article”,"_id":“1”},{"_index":“index02”,"_type":“article”,"_id":“2”}]}’

删除文档对象 :

为了在集群中对主从分片复制有一致性判断,version在删除时也会自增1
curl -XDELETE http://10.9.48.69:9200/index01/article/1
关于version,是document的一个属性,只要document发生了改变,这个version的版本就会加1.

使用ES 通过http协议操作——搜索管理

文档存于索引中,下面就学习如何从索引中查询文档,其实也是把查询条件封装到query中。

match_all :
查询索引中的所有无参条件的数据.默认前50

curl -XGET http://10.9.48.69:9200/index02/_search -d ‘{“query”: {“match_all”: {}}}’

term_query :
词项查询,当前数据写入索引时使用的分词器—默认Standard

curl -XGET http://10.9.48.69:9200/index02/_search -d ‘{“query”:{“term”:{“title”:“简介”}}}’

问题:默认如果是standard,不满足我们定义数据分词计算需求,就要使用中文分词器,怎么指定.

match_query :
只提供查询的文本,es会使用分词器对文本先解析.

curl -XGET http://10.9.48.69:9200/index02/_search -d ‘{“query”:{“match”:{“title”:“大数据简介”}}}’

title创建多个TermQuery
大数据简介–>分词器分词–>大 数 据 简 介
5个termQuery 挨个查,所有结果返回

Mapping

mapping简单来说,就是去定义一个document中的属性是什么类型,比如lucene中

            doc1.add(new TextField("title","腾讯视频", Field.Store.YES));
            //参数意义 name:域属性名称 value: 源数据 store:表示是否存储在索引中.
            doc1.add(new TextField("content",
                    "创造202 刘念c位出道 ",
                    Field.Store.YES));
            doc1.add(new TextField("writer","刘翔华", Field.Store.YES));
            //数字类型数据 IntPoint LongPoint DoublePoint FloatPoint
            doc1.add(new IntPoint("click",58));
            doc1.add(new StringField("click","58次", Field.Store.YES));
            /*

给document添加TextField,IntPoint,StringField这种操作,就是mapping做的,它给document中的属性绑定上了对应的特性。
每个索引中,都有自己的mapping属性,定义了当前索引中类型的具体结构。

动态mapping:
在新增document时,根据数据格式,自动把它分为各种type(TextField,IntPoint,StringField)
例如:
新增数据{“name”:“wanglaoshi”},mapping会把wanglaoshi默认为type:text,底层是lucene的TextField,并且调用默认的分词规则analyzer:standard。
注意:

json是字符串时,默认type:text 底层就是TextField
json是个数字数据,默认type:long 底层lucene创建document LongPoint+StringField

如果你不希望该属性被分词,可以给fields属性加上keyword。

静态mapping:
当你想给document属性自定义分词规则的时候,就可以使用静态mapping。当你定义好了document中属性使用什么分词规则的时候,当再有

案例:
新建一个index06 将已经编辑好的mapping 放进去作为请求体数据。针对content,title使用ik分词器

curl -XPUT -d ‘{“mappings”:{“book”:{“properties”:{
“content”:{“type”:“text”,“analyzer”:“ik_max_word”},
“id”:{“type”:“integer”},
“title”:{“type”:“text”,“analyzer”:“ik_max_word”}}}}}’
http://10.9.48.69:9200/index06

猜你喜欢

转载自blog.csdn.net/weixin_42596778/article/details/106627653