首页 > 其他分享 >Elasticsearch 进阶检索 (二)

Elasticsearch 进阶检索 (二)

时间:2022-10-16 14:56:36浏览次数:86  
标签:检索 index 进阶 映射 mapping 索引 Elasticsearch 类型 type

一、进阶检索

1、Mapping

1)、字段类型

一、数据类型

字段类型概述

一级分类

二级分类

具体类型

描述

核心类型

字符串类型

string,text,keyword

 
 

整数类型

integer,long,short,byte

 
 

浮点类型

double,float,half_float,scaled_float

 
 

逻辑类型

boolean

 
 

日期类型

date

 
 

范围类型

range

 
 

二进制类型

binary

 

复合类型

数组类型

array

 
 

对象类型

object

 
 

嵌套类型

nested

 

地理类型

地理坐标类型

geo_point

用于描述经纬度坐标

 

地理地图

geo_shape

用于描述复杂形状,如多边形

特殊类型

IP类型

ip

用于描述ipv4 和 ipv6 地址

 

范围类型

completion

提供自动完成提示

 

令牌计数类型

token_count

用于统计字符串的词条数量

 

附件类型

attachment

参考 mapper-attachments 插件,支持将附件如 Microsoft Office格式,ePub ,HTML 等等索引为attachment数据类型

 

抽取类型

percolator

接受特定领域查询语言(query-dsl)的查询

多字段

通常用于为不同目的用不同的方法索引同一个字段,例如,string字段可以映射为一个text字段用于全文检索,同样可以映射为一个keyword字段用于排序和聚合。另外,你可以使用standard analyzer, english analyzer , french analyzer 来索引一个text字段,这就是muti-fields的目的,大多数的数据类型通过fields参数来支持muti-fields。

 

2)、映射

Mapping(映射)

Mapping是用来定义一个文档(document),以及它所包含的属性(field)是如何存储和索引的。比如,使用mapping来定义:

  • 哪些字符串属性应该被看做全文本属性(full text fields)。
  • 哪些属性包含数字,日期或者地理位置。
  • 文档中的所有属性是否都能被索引(_all 配置)。
  • 日期的格式。
  • 自定义映射规则来执行动态添加属性。
  • 查看mapping信息
GET bank/_mapping
  • 修改mapping信息

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html

自动猜测的映射类型

 

JSON type

域 type

布尔型:true 或者 false

boolean

整数:123

long

浮点型:123.45

double

字符串,有效日期:2014-09-15

date

字符串:foo bar

string

3)、新版本的改变

Es7 及以上移除了type的概念。

  • 关系型数据库中两个数据表示是独立的,即使他们里面有相同名称的列也不影响使用,但ES中不是这样的。elasticsearch是基于Lucene开发的搜索引擎,而ES中不同type下名称相同的filed最终在Lucene中的处理方式是一样的。

1 两个不同type下的两个user_name,在ES同一个索引下其实被认为是同一个filed,你必须在两个不同的type中定义相同的filed映射。否则,不同type中的相同字段名称就会在处理中出现冲突的情况,导致Lucene处理效率下降。去掉type能够使数据存储在独立的index中,这样即使有相同的字段名称也不会出现冲突,就像ElasticSearch出现的第一句话一样“你知道的,为了搜索····”。

2 去掉type就是为了提高ES处理数据的效率。

Elasticsearch 7.x

  • URL中的type参数为可选。比如,索引一个文档不再要求提供文档类型。

Elasticsearch 8.x

  • 不再支持URL中的type参数。

解决:

  1. 将索引从多类索引迁移到单类型,每种类型文档一个独立索引
  2. 将已存在的索引下的类型数据,全部迁移到指定位置即可。

 1、 创建映射

PUT /my_index
{
  "mappings": {
    "properties": {
      "age":{"type": "integer"},
      "email":{"type":"keyword"},
      "name":{"type": "text"}
    }
  }
}

2、 添加新的字段映射

PUT /my_index/_mapping
{
  "properties":{
    "employee-id":{
      "type":"keyword",
      "index":false
    }
  }
}

 3、更新映射

对于已存在的映射字段,我们不能更新。更新必须创建新的索引进行数据迁移。

4、 数据迁移

先创建出new_twitter的正确映射。然后使用如下方式进行数据迁移

POST_reindex [固定写法]

{

“source”:{

"index":"twitter"

},

"dest":{

"index":"new_twitter"

}

}

将旧索引的type下的数据进行迁移

POST_reindex

{

“source:{

"index":"twitter",

"type":"tweet"

},

"dest":{

"index":"tweets"

}

}

 

标签:检索,index,进阶,映射,mapping,索引,Elasticsearch,类型,type
From: https://www.cnblogs.com/mangoubiubiu/p/16796211.html

相关文章

  • 在Docker容器中运行Elasticsearch、Kinbana、Cerebo、Logstash
    确保自己的Centos环境中已经安装好了Docker,Docker-compose相关的软件安装cerebro、es、kibana编写docker-compose.yml文件,部署单机环境version:'3.5'services:cer......
  • 使用Docker容器安装Elasticsearch,Kibana
    安装前请确保linux已经安装好了Docker和DockerCompose,并配置好Docker镜像容器加速,推荐使用国内镜像加速地址,例如阿里云或者DaoCloud的镜像加速服务。需要注册帐号准备......
  • Pytest进阶使用
    fixture特点:命令灵活:对于setup,teardown可以省略数据共享:在conftest.py配置里写方法可以实现数据共享,不需要import导入,可以跨文件共享scope的层次及神奇的yield组......
  • Java注解(3):一个真实Elasticsearch案例
    学会了技术就要使用,否则很容易忘记,因为自然界压根就不存在什么代码、变量之类的玩意,这都是一些和生活常识格格不入的东西。只能多用多练,形成肌肉记忆才行。在一次实际的产......
  • Elasticsearch 和 Kibana 安装
    Elasticsearch和Kibana安装操作系统:Windows10ElasticStack版本:8.4.3目录Elasticsearch和Kibana安装安装Elasticsearch客户端连接Elasticsearch安装Kibana......
  • elasticsearch的查询数大于10000查询失败
    错误信息Causedby:ElasticsearchException[Elasticsearchexception[type=illegal_argument_exception,reason=Resultwindowistoolarge,from+sizemustbeles......
  • ElasticSearch
    选型因为数据库的like等操作会导致索引失效,进而导致查询性能低,功能弱,从而引入ElasticSearch通过倒排索引解决全文检索性能和功能的问题。数据结构倒排索引一般包含两......
  • vue-hooks__钩子函数__进阶
    vue-hooks__钩子函数__进阶联合其他模块进行使用useHandleData用于处理数据import{ElMessageBox,ElMessage}from"element-plus";//引入element-plus的弹窗组......
  • SQL进阶篇之多表联查
    SQLAlias(别名)通过使用SQL,可以为列名称和表名称指定别名(Alias)表的SQLAlias语法SELECTcolumn_name(s)FROMtable_nameASalias_name列的SQLAlias语法SELEC......
  • Elasticsearch使用terms聚合之后进行分页排序
    引言elasticsearch中实现聚合也非常常见,同时es的数据量一般比较大,因此聚合结果比较多,像terms聚合默认只返回10条聚合结果,所以聚合之后进行分页,也是非常常见的操作。es的t......