全文检索 Elasticearch 研究一(入门)

集群中的某一台服务器就叫节点

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类型,是不是会出现乱码情况。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值