1.4、Kibana使用说明

通过访问IP:5601即可

注:下列所有操作可结合elasticsearch-head进行学习

索引的创建删除操作

索引其实也可以理解成是一张表

索引创建

索引创建并赋值

 索引创建及定义属性

 这里会涉及type为text类型,除了text类型,对于字符串还可以分配keyword类型,二者区别如下:

  • keyword类型的词语会被当成一个整体存储

  • text类型的词语则会被分词器拆分进行存储,中文是单个存储,英文是按照空格进行,在我们进行查找的时候默认都会进行拆分,这里的拆分规则和分词器字典无关

 索引删除

索引文档的增删改操作

增加索引文档

注:id需唯一,如果指向的是已存在的id,则会变为修改操作

修改索引文档

虽然使用增加索引的方式也可以实现索引文档的修改,但是其实ES也提供了update方法来进行修改

删除索引文档

其实删除索引和删除索引文档的区别就在于是否准确指定到具体的id,未指定则就会删除其索引

索引文档的简单查询 


以下所有查询操作都基于该索引进行查询

 

索引文档的条件查询 

首先需要了解一点,我们的数据存储形式,在不考虑分词器的情况下

通过_analyze分析,默认text的存储形式是进行拆分存储,而keyword是不会进行拆分存储,这个其实上方创建索引并赋值时就有说明

然后再来理解下Match和Term的区别

Match是模糊查询

Match查询时,我们的搜索词将会被分词进行查询

  • 当查询text时,由于我们一句话是会拆分存储,搜索词也会被分词查询,所以只要包含任意字的都会被查出,也就是模糊匹配
  • 当查询keyword时,由于我们一句话是不会被拆分存储,虽然搜索词分词了,但是因为存储词没有进行拆分,搜索词又必须对应上存储词,所以间接就成了精确匹配

Term是精确查询

Term查询时,我们的搜索词将不会被分词进行查询

  • 当查询text时,由于我们一句话是会拆分存储,但是我们的搜索词又不会被分词,所以这时候我们只有单个字进行查询时才对应得上存储词的结果,间接也就成为了模糊匹配
  • 当查询keyword时,由于我们一句话是不会被拆分存储,我们的搜索词也不会被分词,所以该情况就是精确匹配

总结

  • 查询keyword:Match和Term查询都需要精确匹配
  • 查询text:Match会进行分词查询,模糊匹配。Term只能通过单个字去进行查询,也是模糊匹配

注:汉语是一个字一个字分组,英文的话是以空格进行分组


通过下列例子可以进行更好的了解

Match模糊查询

可以看出我们的搜索词是被分词进行查询的,又因为text也是拆分的,所以包含”王“和包含“明"的数据都被查出来了

加上keyword后,虽然我们也是分词查询,但是索引数据是不拆分存储的,所以数据无法被查出来

 更换成别的查询条件后,可以发现,我们分词查询必须完全对应分词存储的数据,数据才会被查出来,也就是精确匹配

Term精确查询

可以看出,我们不分词查询,查分词存储,通过以下方式,是一个都无法对应上的

只有条件为单个字的时候才可以对应上

keyword的话,搜索词不分词,存储词不拆分,就只能是精确匹配了

其他方法说明 

_source和sort 

_source代表只输出指定属性,sort代表按照指定属性排序,from代表从第几个数据开始,size代表输出几个

Bool多条件查询(must_not、must、should、filter)

通过bool可以进行多条件查询,must_not代表不匹配,must代表必须匹配,should代表只要有其中一个条件匹配即可,filter代表条件过滤器

must

must_not

filter

过滤出age大于10小于16的

should

should使用注意事项

当should和must或filter一起使用时,should就会失效,具体可参考该博客:elasticsearch bool中should must联用问题

 

posted @ 2022-04-08 02:07  RFAA  阅读(1265)  评论(0编辑  收藏  举报