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的安装使用 -> 正文阅读

[大数据]elasticsearch的安装使用

elasticsearch数据获取:

????????1:爬虫获取数据

????????2:从关系型数据库同步数据

????????涉及到ES使用方式

数据存储:

????????es是一种类似于非关系型数据库的方式存放数据

????????数据存储结构类似mongodb文档结构,但是比mongodb更为复杂处理

????????涉及到数据分词,倒排等相关操作

数据检索:

????????全文搜索

????????高亮搜索

????????条件搜索

应用场景

????????1、社会化搜索

????????2、实时搜索

????????3、移动搜索

????????4、个性化搜索

????????5、地理位置感知搜索

????????6、跨语言搜索

????????7、多媒体搜索

????????8、情境搜索

我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。

适用场景:

1>海量数据分析引擎

2>站内搜索引擎

3>数据仓库

一线公司使用:

英国卫报-实时分析公众对文章的回应

维基百科,github - 站内实时搜索

百度-实时日志监控平台

阿里 google 京东 小米 华为

elasticsearch的安装使用

ES服务器

1:Java编写的解压即用的软件,只需要有Java的运行环境即可,把压缩包解压后,进入到bin目录运行elasticsearch.bat

2:浏览器输入:http://localhost:9200,看到浏览器输出服务器的信息,表示安装成功,可以使用了

????????1.x、2.x、5.x、6.x、7.x。注意没有3, 4原因:elk 技术整合版本选择:最先版本 7.x 6.x 都可以

ES可视化客户端-head--观察ES数据

????????Elasticsearch默认的客户端工具是命令行形式的,操作起来不方便,也不直观看到数据的展示,所以我们需要去安装一个可视化插件,但是这些插件都是基于H5开发的,在谷歌的应用商店中找到**elasticsearch-head**插件,然后安装,使用该插件能比较直观的展示服务器中的数据。需要安装到谷歌浏览器。(首先需要把开发者模式开启,然后加载插件,选中head所在的目录)

ES操作客户端-kibana----操作ES数据

????????步骤1:下载kibana

????????????????https://www.elastic.co/cn/downloads/kibana

????????????????注意:版本必须跟es一致

????????步骤2:修改配置

????????????????根/config/kibana.yml

????????????????都是默认情况,可以不用修改

????????步骤3:启动kibana

????????????????根/bin/kibana

????????步骤4:访问客户端

????????????????http://localhost:5601

分词器

????????直接把压缩文件中的内容解压,然后放在elasticsearch/plugins下,然后重启即可

用于检索时,通过分词器,找到是否有对应的中文词组,有则按此进行搜索。如:英特尔,如果不适用分词器,搜索的会是按照 英, 特, 尔, 分开进行搜索

简单使用

核心概念

elasticsearch的存储结构为索引(index),类型(type),文档(document),列(field)。类似关系数据库对应的数据库(database),表(table),数据行(row),数据列(Colum)

常规操作

添加

语法:PUT /索引名
在没有特殊设置的情况下,默认有1个分片,1个备份,也可以通过请求参数的方式来指定
参数格式:
默认:
PUT my_index

明确指定:

PUT /my_index
{
  "settings": {
    "number_of_shards": 5, //设置5个片区
    "number_of_replicas": 1 //设置1个备份
  }
}

注意: 
1:索引不能有大写字母
2:参数格式必须是标准的json格式

查看

#看单个
GET  /索引名 
#看所有
GET _cat/indices

删除:

语法:DELETE /索引名

设置映射(列)

创建

类型跟映射一起创建
语法:
PUT /索引名
{
  "mappings": {
      "properties": {
        字段名: {
          "type": 字段类型, 
          "analyzer": 分词器类型, 
          "search_analyzer": 分词器类型,
          ...
        },
        ...
      }
    }
}
字段类型就是:数据类型
配置:analyzer search_analyzer  前提是 type:text类型
-------------------------------------------------------
创建类型并设置映射(类似于mysql创建表)
eg:
PUT /my_index
{
  "mappings": {  
      "properties":{
         "id":{
           "type":"long"
         },
         "name":{
           "type":"keyword"
         },
         "age":{
           "type":"integer"
         }
      }
    }
}

查看

语法:GET /索引名/_mapping
需求: 查看映射
GET /my_index/_mapping

文档操作

数据类型

https://www.jianshu.com/p/01f489c46c38

有很多很多

核心类型:

text 类型:当一个字段是要被全文搜索的,比如Email内容、产品描述,应该使用text类型。设置text类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分析器分成一个一个词项。text类型的字段不用于排序,很少用于聚合。

keyword类型:适用于索引结构化的字段,比如email地址、主机名、状态码和标签。如果字段需要进行过滤(比如查找已发布博客中status属性为published的文章)、排序、聚合。keyword类型的字段只能通过精确值搜索到。

数值 类型:byte、short、integer、doule、float、date类型、boolean类型、binary类型、array类型、object类型、ip类型

文档的基本操作

文档添加:

语法:
//必须明确指定id-推荐
PUT /索引名/_doc/文档ID
{
  field1: value1,
  field2: value2,
  ...
}
//不指定指定id默认使用随机字符串
POST /索引名/_doc
{
  field1: value1,
  field2: value2,
  ...
}
注意:
1:当索引/映射不存在时,会使用默认设置自动添加
2:ES中的数据一般是从别的数据库导入的,所以文档的ID会沿用原数据库中的ID
3:操作时,如果指定文档id, 并且索引库中已经存在, 则执行更新操作, 否则执行添加
4:不指定id的添加, es会指定添加一个字符串类型id
结果字段解释:
_index:所属索引
_type:所属类型
 _id:文档ID
_version:乐观锁版本号
_source:数据内容
result : 命令操作类型
_shards: 分片相关信息
需求1:新增一个文档
PUT /my_index/_doc/1
{
  "id":1,
  "name":"dafei",
  "age":18
}

文档更新:

语法:
PUT /索引名/_doc/文档ID
{
  field1: value1,
  field2: value2,
  ...
}
注意:
1:如果不指定id, 操作失败
需求2:替换一个文档
PUT /my_index/_doc/1
{
  "id":1,
  "name":"xiaofei",
   "age":18
}
-----------------------
{
  "_index" : "es_index",
  "_type" : "users",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 1
}
----------------
部分更新字段
POST /my_index/_update/1/
{
  "doc":{
    "name":"xiaofei"
  }
}

文档查看:

语法:
根据ID查询 -> GET /索引名/_doc/文档ID
查询所有(基本查询语句) -> GET /索引名/_doc/_search

结果字段解释:
took:耗时
_shards.total:分片总数
hits.total:查询到的数量
hits.max_score:最大匹配度
hits.hits:查询到的结果
hits.hits._score:匹配度
需求1:根据文档ID查询一个文档
GET /my_index/_doc/1

-------
{
  "_index" : "es_index",
  "_type" : "users",
  "_id" : "1",
  "_version" : 4,
  "_seq_no" : 3,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "id" : 1,
    "name" : "xiaofei",
    "age" : 18
  }
}
需求2:查询所有的文档 
GET /my_index/_search    #默认查询10个

文档删除:

语法:DELETE /索引名/类型名/文档ID
注意:这里的删除并且不是真正意义上的删除,仅仅是清空文档内容而已,并且标记该文档的状态为删除
需求1:根据文档ID删除一个文档
DELETE /my_index/_doc/1
需求2:又添加刚刚删除的文档
PUT /my_index/_doc/1
{
  "id":1,
  "name":"dafei",
  "age":18
}

注意:
1:es中的删除并不会将数据真实删除,仅仅是修改数据中状态

全文搜索

搜索语句:

match

表示全文检索,也可也做精确查询,value值会被分词器拆分,然后去倒排索引中匹配
参数格式:
GET /索引/_search
{
  "query": {
    "match": {field: value}
  }
}
需求:查询商品标题中符合"游戏 手机"的字样的商品 【暂时理解为模糊查询】
GET /product/_search
{
  "query": {
    "match":{
      "title": "游戏 手机"
    }
  }
}

multi_match

参数格式:
GET /索引/_search
{
  "query": {
    "multi_match": {
      "query": value,
      "fields": [field1, field2, ...]
    }
  }
}
multi_match:表示在多个字段间做检索,只要其中一个字段满足条件就能查询出来,多用在字段上
需求:查询商品标题或简介中符合"蓝牙 指纹 双卡"的字样的商品
GET /product/_search
{
  "query": {
    "multi_match":{
      "query":"蓝牙 指纹 双卡",
      "fields": ["title", "intro"]
    }
  }
}

中文分词器

把文本内容按照标准进行切分,默认的是standard,该分词器按照单词切分,内容转变为小写,去掉标点,遇到每个中文字符都当成1个单词处理,后面会安装开源的中文分词器插件(ik)

默认分词器:
GET /product/_analyze
{
  "text":"I am Groot"
}

GET /product/_analyze
{
  "text":"英特尔酷睿i7处理器"
}
结论:默认的分词器只能对英文正常分词,不能对中文正常分词

IK分词器:
1、ik_max_word 【细粒度分词】
会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。

2、ik_smart 【粗粒度分词】
会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。

GET /product/_analyze
{
  "text":"I am Groot",
  "analyzer":"ik_smart"
}
GET /product/_analyze
{
  "text":"英特尔酷睿i7处理器",
  "analyzer":"ik_smart"
}
GET /product/_analyze
{
  "text":"英特尔酷睿i7处理器",
  "analyzer":"ik_max_word"
}
结论:都能正常分词

拓展词库

????????最简单的方式就是找到IK插件中的**config/main.dic**文件,往里面添加新的词汇,然后重启服务器即可

倒序索引:

????????倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)

https://blog.csdn.net/starzhou/article/details/87519973

高亮显示

参数格式:
GET /索引/_search
{
  "query": { ... },
  "highlight": {
    "fields": {
      field1: {},
      field2: {},
      ...
    },
    "pre_tags": 开始标签,
    "post_tags" 结束标签
  }
}
highlight:表示高亮显示,需要在fields中配置哪些字段中检索到该内容需要高亮显示
  必须配合检索(term / match)一起使用
需求:查询商品标题或简介中符合"蓝牙 指纹 双卡"的字样的商品,并且高亮显示
GET /product/_search
{
  "query": {
    "multi_match":{
      "query":"蓝牙 指纹 双卡",
      "fields": ["title", "intro"]
    }
  },
  "highlight": {
    "fields": {
      "title": {"type": "plain"},
      "intro": {"type": "plain"}
    },
    "pre_tags": "<span style='color:red;'>",
    "post_tags": "</span>"
  }
}

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 10:14:50  更:2021-09-26 10:16:52 
 
开发: 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 22:51:36-

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