IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> ElasticSearch分词器插件与Restful-API应用实战(二) -> 正文阅读

[大数据]ElasticSearch分词器插件与Restful-API应用实战(二)

ElasticSearch 简介与安装(一)

上一篇我们去安装了ElasticSearch和可视化工具kibana,本章咱们针对可视化工具,去操作一些ES提供的Restful-API,去实际上调用一些ElasticSearch的功能,让我们看看ES到底有哪些功能吧。

分词器

顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。在 ES 中,Analysis 是通过分词器(Analyzer) 来实现的,可使用 ES 内置的分析器或者按需定制化分析器。

举一个分词简单的例子: 比如你输入 Mastering Elasticsearch,会自动帮你分成两个单词,一个是 mastering,另一个是 elasticsearch,可以看出单词也被转化成了小写的。

中文推荐 ik分词器,对中文汉字去分词很友好,下面也会有对比图。

默认分词器-standard

在中文上,会将汉字拆分成单个汉字,也被称之为单字分词器。
在这里插入图片描述

ik分词器

ik_smart模式

粗粒度的拆分
在这里插入图片描述

ik_max_word模式

细粒度拆分
在这里插入图片描述

ik的分词器是需要集成,需要安装插件。

ik分词器插件安装

安装很简单:
创建路径 : /usr/local/es/elasticsearch-7.6.1/plugins/ik

我们之前es是安装在 /usr/local/es 目录下的,我们只需要找到安装的es下的plugins文件加下,将下载好的ik插件解压进去,然后重启es就可以。

(ik插件下载地址) https://github.com/medcl/elasticsearch-analysis-ik/releases

注意:ik的版本要和es的版本一致的,还有就是根据自己安装的插件,创建具体的文件路径。

操作Api

POST _analyze 分词分析过程

_analyze是Elasticsearch一个非常有用的API,它可以帮助你分析每一个field或者某个analyzer/tokenizer是如何分析和索引一段文字,有助于我们去理解ES和在使用的过程中,怎么保证索引命中。

POST _analyze
{
  "analyzer":"ik_max_word",//采用的分词器
  "text":"我爱你中国" //分析文本
}


#响应
{
  "tokens" : [
    {
      "token" : "我爱你",  //是一个实际被存储在索引中的词
      "start_offset" : 0,
      "end_offset" : 3, //和start_offset配合表示占据的位置长度
      "type" : "CN_WORD",
      "position" : 0  //指明词在原文本中是第几个出现的
    },
    {
      "token" : "爱你",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "中国",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 2
    }
  ]
}

创建索引 dxt索引

PUT /dxt

#响应
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "dxt"
}

查索引

GET /dxt

#响应
{
  "dxt" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "creation_date" : "1627901493723",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "krY5xm1mSdqxaJQD6EGuuQ",
        "version" : {
          "created" : "7060199"
        },
        "provided_name" : "dxt"
      }
    }
  }
}

删索引

GET /dxt

#响应
{
  "acknowledged" : true
}


创建数据/更新数据

/database/type/唯一id

PUT /dxt/_doc/1001
{
  "name":"法外狂徒-张三",
  "age":"21",
  "address":"广州天河区"
}

#响应
{
  "_index" : "dxt",
  "_type" : "_doc",
  "_id" : "1001",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}


POST局部更新

POST /dxt/_update/1001
{
 "doc": {
    "name":"狂徒-张三",  #已有的字段更新
    "zhiye":"法师"       #新的字段新增
 }
}

#响应
{
  "_index" : "dxt",
  "_type" : "_doc",
  "_id" : "1001",
  "_version" : 2, #更新的版本会+1
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 1
}


#局部更新 旧写法
POST /dxt/_doc/1001/_update
{
 "doc": {
    "name":"法内-张三"
 }
}

POST和PUT都能够创建/更新数据,他们的区别:

  • put创建数据时是要指定id键的,post创建数据的时候是可以不指定唯一键,由es自己生成唯一id。
  • put会将整个数据进行替换,而post是将相同key值进行替换。
  • GET、PUT和DELETE都是幂等性的操作,不论操作几次得到的结果都是一样的。

方法的幂等性,体现在我们在操作esapi的时候,操作一次和几次的效果是一样的。而post就以创建为例,如果不指定唯一id,是由es自己去创建,那么每次生成的id是不一样,所以它是无法保证幂等的。

ES7.版本的 默认type是_doc。

查询数据

查询

GET /dxt/_doc/1001

#响应
{
  "_index" : "dxt",
  "_type" : "_doc",
  "_id" : "1001",
  "_version" : 2,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "法内-张三",
    "age" : "21",
    "address" : "广州天河区",
    "zhiye" : "法师"
  }
}

删除数据

GET /dxt/_doc/1003

#响应
{
  "_index" : "dxt",
  "_type" : "_doc",
  "_id" : "1002",
  "_version" : 2,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 4,
  "_primary_term" : 1
}

查询所有的数据 例如:select * from user

GET /dxt/_search

#响应
{
  "took" : 777,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "dxt",
        "_type" : "_doc",
        "_id" : "1001",
        "_score" : 1.0,  #查询的匹配得分,排名,分数越大匹配越好
        "_source" : {
          "name" : "法内-张三",
          "age" : "21",
          "address" : "广州天河区",
          "zhiye" : "法师"
        }
      }
    ]
  }
}


条件查询

类似sql select * from dxt where name=‘张三’

GET /dxt/_search?q=name:张三

#响应
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.28363907,
    "hits" : [
      {
        "_index" : "dxt",
        "_type" : "_doc",
        "_id" : "1001",
        "_score" : 0.28363907,
        "_source" : {
          "name" : "法内-张三",
          "age" : "21",
          "address" : "广州天河区",
          "zhiye" : "法师"
        }
      }
    ]
  }
}


区间查询 >= <=

GET /dxt/_search?q=age:>20

分页查询

from 起点 size 页数 类似 limit

GET /dxt/_search?q=name:张三&from=0&size=2

设置搜索后的展示字段

_source = 字段名称1,字段名称1

GET /dxt/_search?_source=name,age&q=name:张三

排序

GET /dxt/_search?sort=age:desc

结语

本章主要是一些简单的api应用,我们是直接操作的视化工具kibana去做的,后续在代码中去实现客户端,还会有更加复杂的查询操作,当然 ElasticSearch的强大功能还远远不止如此,接下来我和大家一起慢慢发掘~

我是 祥天 ,期望在提高自己的同时,输出较高质量的分享,感谢各位读者的:点赞收藏评论,我们一起加油~

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:16:33  更:2021-08-03 11:17:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 5:26:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码