集群中的某一台服务器就叫节点
1、搜索的过程是怎么样的?添加文档的过程是怎么样的?
1.1、搜索通过分词,在分词列表中匹配,然后去查找原始文档。
1.2、添加文档即添加索引,通过分词器将分词添加到分词列表,然后将原始文档进行存储
2、更改映射可以更改哪些属性?ES允许只能增加映射,不能更改映射
1 、ElasticSearch
1.1、介绍
ElasticSearch是一款基于Lucene的搜索引擎服务,向外提供restful接口。
1.2、优势
1.2.1、扩展性好,可以提供PB级数据,可提供上百台服务器集群
1.2.2、实时性比较好,即搜索和索引速度快
1.3、 ElasticSearch 与 Solr 区别 :
1.3.1、 数据格式 : solr 中支持 json , xml , csv … ; ElasticSearch中只支持一种 json ;
1.3.2、实时搜索性能 : ElasticSearch 实时搜索(边建索引, 边搜索)性能要高于solr ;
1.3.3、集群 : Solr集群需要依赖于 Zookeeper 集群 ; ElasticSearch自带集群功能, 不需要依赖于第三方 ;
2、索引结构
2.1、原始文档和索引结构都是存储在索引库的
2.2、倒排索引和正排索引的区别
2.2.1、正排索引是在文章中搜索词
2.2.2、倒排索引是根据词去查找文章
每个原始文档都有索引,原始文档通过分词,然后每个分词进行建索引,并且每个分词和原始文档建立联系。当进行全文搜索的时候,先在分词库中找,然后将原始文档和分词联系比较多的,依次展示出来。
索引库中的索引解释
索引(名词):ES是基于Lucene构建的一个搜索服务,它要从索引库搜索符合条件索引数据。
索引(动词):索引库刚创建起来是空的,将数据添加到索引库的过程称为索引。
3、ES的安装支持docker的安装
4、项目中使用ES的方式如下:
5、快速入门
5.1、创建索引库(相当于创建数据库的表)
5.1.1、索引库包含文档列表和分词列表
5.2、创建映射(相当于创建表结构)
请求方式 : POST
URL : http://localhost:9200/xc_course/doc/_mapping
参数 :
{
"properties": {
"name": {
"type": "text"
},
"description": {
"type": "text"
},
"studymodel": {
"type": "keyword"
}
}
}
5.3、创建文档(也叫创建索引,添加数据)
put 或Post http://localhost:9200/xc_course/doc/id值
5.3.1、id可以不指定,也可以指定。指定的方式为url+id。
5.3.2、创建文档后的内容如下图:
5.4、查询文档
5.5、分词器
5.1.1、如何指定某种分词器?
查询时,指定分词器,示例如下:不指定,使用默认的分词器
测试分词器
发送:post localhost:9200/_analyze {“text”:“中华人民共和国人民大会堂”,“analyzer”:“ik_smart” }
5.1.2、IK分词器的两种模式
5.1.2.1、ik_max_word
会将文本做细粒度的拆分,分隔出来的词越多
5.1.2.2、ik_smart
会做粗粒度的拆分,分隔出来的词越少
5.1.3、自定义词库
可以增加一些流行的词语,提高搜索的准确度
注意:编码格式要选择“无bom,utf-8格式”
5.6、映射
5.6.1、映射维护
5.6.1.1、创建/更新映射
请求方式 : POST
URL : http://localhost:9200/xc_course/doc/_mapping
参数 :
{
"properties": {
"name": {
"type": "text"
},
"description": {
"type": "text"
},
"studymodel": {
"type": "keyword"
}
}
}
5.6.1.2、查询映射
查询指定索引库映射 :
GET http://localhost:9200/xc_course/doc/_mapping
查看所有索引库映射 :
GET http://localhost:9200/_mapping
5.7、常用映射类型
5.7.1、字符串包括两种text和keyword
5.7.1.1、第一种:text
"name": {
"type": "text",
"analyzer":"ik_max_word",
"search_analyzer":"ik_smart"
}
5.7.1.1.1、说明:analyzer:ik_max_word -----创建索引(创建文档)时的分词器目的是为了使文档尽量被搜到 search_analyzer:ik_smart------搜索时的分词器目的是为了搜索结果的匹配度更高一点
5.7.1.1.2、index:是否索引(是否能搜索到,true可以,false不可以。只是进行了存储,当根据其他字段搜索该条文档,该条文档的没有索引的跟着就展示出来了。)
"pic": {
"type": "text",
"index":false
}
5.7.1.1.2、store
是否在source之外存储,每个文档索引后会在 ES中保存一份原始文档,存放在"_source"中,一般情况下不需要设置 store为true,因为在_source中已经有一份原始文档了。
5.7.1.2、第二种:keyword
keyword是不进行分词的,搜索时,是整体匹配。
"name": {
"type": "keyword"
}
keyword字段通常 用于过虑、排序、聚合等。
5.7.2、日期类型
说明:通常日期类型不设置分词器,用于排序,
{
"properties": {
"timestamp": {
"type": "date",
"format": "yyyy‐MM‐dd HH:mm:ss||yyyy‐MM‐dd"
}
} }
5.7.3、数值类型
以下是ES支持的数值类型
尽量选择范围小的类型,提高搜索效率
5.7.3.1、对于浮点数,尽量使用比例因子
比例因子就是最后存储的浮点数*比例因子,这样做的好处就是整型比浮点型更压缩空间,节省空间
"price": {
"type": "scaled_float",
"scaling_factor": 100 # 比例因子
}
ES不支持更改映射类型,要真想改,就删掉索引库,重新创建;但是mysql允许。
(问题来了,mysql如果一个字段是int类型,那么改成varchar类型,是不是会出现乱码情况。)