谷粒商城—分布式高级①.md

   日期:2024-12-27    作者:sxqiangdun 移动:http://mip.riyuangf.com/mobile/quote/74292.html

1、安装elastic search

dokcer中安装elastic search

谷粒商城—分布式高级①.md

(1)下载ealastic search和kibana

 

(2)配置

 

(3)启动Elastic search

 

设置开机启动elasticsearch

 

(4)启动kibana:

 

设置开机启动kibana

 

(5)测试

查看elasticsearch版本信息: http://#:9200/

 

显示elasticsearch 节点信息http://#:9200/_cat/nodes ,

 

访问Kibana: http://#:5601/app/kibana

2、初步检索

1)_CAT

(1)GET/cat/nodes:查看所有节点

如:http://#:9200/_cat/nodes :

 

注:*表示集群中的主节点

(2)GET/cat/health:查看es健康状况

如: http://#:9200/_cat/health

 

注:green表示健康值正常

(3)GET/cat/master:查看主节点

如: http://#:9200/_cat/master

 

(4)GET/_cat/indicies:查看所有索引 ,等价于mysql数据库的show databases;

如: http://#:9200/_cat/indices

 
2)索引一个文档

保存一个数据,保存在哪个索引的哪个类型下,指定用那个唯一标识
PUT customer/external/1;在customer索引下的external类型下保存1号数据为

 
 

PUT和POST都可以
POST新增。如果不指定id,会自动生成id。指定id就会修改这个数据,并新增版本号;
PUT可以新增也可以修改。PUT必须指定id;由于PUT需要指定id,我们一般用来做修改操作,不指定id会报错。

创建数据成功后,显示201 created表示插入记录成功。

 

这些返回的JSON串的含义;这些带有下划线开头的,称为元数据,反映了当前的基本信息。

“_index”: “customer” 表明该数据在哪个数据库下;

“_type”: “external” 表明该数据在哪个类型下;

“_id”: “1” 表明被保存数据的id;

“_version”: 1, 被保存数据的版本

“result”: “created” 这里是创建了一条数据,如果重新put一条数据,则该状态会变为updated,并且版本号也会发生变化。

下面选用POST方式:

http://#:9200/customer/external/1

 

通过“if_seq_no=1&if_primary_term=1 ”,当序列号匹配的时候,才进行修改,否则不修改。

实例:将id=1的数据更新为name=1,然后再次更新为name=2,起始_seq_no=6,_primary_term=1

(1)将name更新为1

(3)查询新的数据

http://#:9200/customer/external/1

能够看到_seq_no变为7。

(4)再次更新,更新成功

(1)POST更新文档,带有_update

http://#:9200/customer/external/1/_update

如果再次执行更新,则不执行任何操作,序列号也不发生变化

POST更新方式,会对比原来的数据,和原来的相同,则不执行任何操作(version和_seq_no)都不变。

(2)POST更新文档,不带_update

在更新过程中,重复执行更新操作,数据也能够更新成功,不会和原来的数据进行对比。

5)删除文档或索引
 

注:elasticsearch并没有提供删除类型的操作,只提供了删除索引和文档的操作。

删除前,所有的索引

 

删除“ customer ”索引

删除后,所有的索引

 
6)eleasticsearch的批量操作——bulk

语法格式:

 

这里的批量操作,当发生某一条执行发生失败时,其他的数据仍然能够接着执行,也就是说彼此之间是独立的。

bulk api以此按顺序执行所有的action(动作)。如果一个单个的动作因任何原因失败,它将继续处理它后面剩余的动作。当bulk api返回时,它将提供每个动作的状态(与发送的顺序相同),所以您可以检查是否一个指定的动作是否失败了。

实例1: 执行多条数据

 

执行结果

 

实例2:对于整个索引执行批量操作

 

运行结果:

 
7)样本测试数据

准备了一份顾客银行账户信息的虚构的JSON文档样本。每个文档都有下列的schema(模式)。

 

https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json ,导入测试数据,

POST bank/account/_bulk

3、检索

1)search Api

ES支持两种基本方式检索;

  • 通过REST request uri 发送搜索参数 (uri +检索参数);
  • 通过REST request body 来发送它们(uri+请求体);

信息检索

uri+请求体进行检索

 

HTTP客户端工具(),get请求不能够携带请求体,

 

返回结果:

 

(1)只有6条数据,这是因为存在分页查询;

使用和可以指定查询

 

(2)详细的字段信息,参照: https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-search.html

The response also provides the following information about the search request:

  • – how long it took Elasticsearch to run the query, in milliseconds
  • – whether or not the search request timed out
  • – how many shards were searched and a breakdown of how many shards succeeded, failed, or were skipped.
  • – the score of the most relevant document found
  • - how many matching documents were found
  • - the document’s sort position (when not sorting by relevance score)
  • - the document’s relevance score (not applicable when using )
2)Query DSL
(1)基本语法格式

Elasticsearch提供了一个可以执行查询的Json风格的DSL。这个被称为Query DSL,该查询语言非常全面。

一个查询语句的典型结构

 

如果针对于某个字段,那么它的结构如下:

 
 

query定义如何查询;

  • match_all查询类型【代表查询所有的所有】,es中可以在query中组合非常多的查询类型完成复杂查询;
  • 除了query参数之外,我们可也传递其他的参数以改变查询结果,如sort,size;
  • from+size限定,完成分页功能;
  • sort排序,多字段排序,会在前序字段相等时后续字段内部排序,否则以前序为准;
(2)返回部分字段
 

查询结果:

 
(3)match匹配查询
  • 基本类型(非字符串),精确控制
 

match返回account_number=20的数据。

查询结果:

 
  • 字符串,全文检索
 

全文检索,最终会按照评分进行排序,会对检索条件进行分词匹配。

查询结果:

 
(4) match_phrase [短句匹配]

将需要匹配的值当成一整个单词(不分词)进行检索

 

查处address中包含mill_road的所有记录,并给出相关性得分

查看结果:

 

match_phrase和Match的区别,观察如下实例:

 

查询结果:

 

使用match的keyword

 

查询结果,一条也未匹配到

 

修改匹配条件为“990 Mill Road”

 

查询出一条数据

 

文本字段的匹配,使用keyword,匹配的条件就是要显示字段的全部值,要进行精确匹配的。

match_phrase是做短语匹配,只要文本中包含匹配条件,就能匹配到。

(5)multi_math【多字段匹配】
 

state或者address中包含mill,并且在查询过程中,会对于查询条件进行分词。

查询结果:

 
(6)bool用来做复合查询

复合语句可以合并,任何其他查询语句,包括符合语句。这也就意味着,复合语句之间
可以互相嵌套,可以表达非常复杂的逻辑。

must:必须达到must所列举的所有条件

 

must_not,必须不匹配must_not所列举的所有条件。

should,应该满足should所列举的条件。

实例:查询gender=m,并且address=mill的数据

 

查询结果:

 

must_not:必须不是指定的情况

实例:查询gender=m,并且address=mill的数据,但是age不等于38的

 

查询结果:


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号