推广 热搜: 行业  机械  设备    系统  教师    参数  经纪  蒸汽 

Elasticsearch学习(五)Elasticsearch中的mapping问题,Search 搜索详解

   日期:2025-01-01     移动:http://sjzytwl.xhstdz.com/mobile/quote/86461.html

Mapping在Elasticsearch中是非常重要的一个概念。决定了一个index中的field使用什么数据格式存储,使用什么分词器解析,是否有子字段等。

Elasticsearch学习(五)Elasticsearch中的mapping问题,Search 搜索详解

为什么要学习Mapping?

如果没有mapping所有text类型属性默认都使用standard分词器。所以如果希望使用IK分词就必须配置自定义mapping。

Elasticsearch中的数据类型有很多,在这里只介绍常用的数据类型。 只有text类型才能被分词。其他类型不允许。 文本(字符串):text 整数:byte、short、integer、long 浮点型:float、double 布尔类型:boolean 日期类型:date 数组类型:array {a:[]} 对象类型:object {a:{}} 不分词的字符串(关键字): keyword

true or false -> boolean 123 -> long 123.123 -> double 2018-01-01 -> date hello world -> text [] -> array {} -> object 在上述的自动mapping字段类型分配的时候,只有text类型的字段需要分词器。默认分词器是standard分词器。

可以通过命令查看已有index的mapping具体信息,语法如下: GET 索引名/_mapping

如:

GET test_index/_mapping

结果:

可以通过命令,在创建index和type的时候来定制mapping映射,也就是指定字段的类型和字段数据使用的分词器。 手工定制mapping时,只能新增mapping设置,不能对已有的mapping进行修改。 如:有索引a,其中有类型b,增加字段f1的mapping定义。后续可以增加字段f2的mapping定义,但是不能修改f1字段的mapping定义。 通常都是手工创建index,并进行各种定义。如:settings,mapping等。

4.1创建索引时指定mapping

举一个例子:

search的参数都是类似http请求头中的字符串参数提供搜索条件的。 GET [/index_name/type_name/]_search[?parameter_name=parameter_value&…]

2.1全搜索

timeout参数:是超时时长定义。代表每个节点上的每个shard执行搜索时最多耗时多久。不会影响响应的正常返回。只会影响返回响应中的数据数量。 如:索引a中,有10亿数据。存储在5个shard中,假设每个shard中2亿数据,执行全数据搜索的时候,需要耗时1000毫秒。定义timeout为10毫秒,代表的是shard执行10毫秒,搜索出多少数据,直接返回。 在商业项目中,是禁止全数据搜索的。必须指定搜索的索引,类型和关键字。如果没有指定索引或类型,则代表开发目的不明确,需要重新做用例分析。如果没有关键字,称为索引内全搜索,也叫魔鬼搜索。

2.2multi index搜索

**所谓的multi-index就是从多个index中搜索数据。**相对使用较少,只有在复合数据搜索的时候,可能出现。一般来说,如果真使用复合数据搜索,都会使用_all。

如:搜索引擎中的无条件搜索。(现在的应用中都被屏蔽了。使用的是默认搜索条件,执行数据搜索。 如: 电商中的搜索框默认值, 搜索引擎中的类别)

无条件搜索,在搜索应用中称为“魔鬼搜索”,代表的是,搜索引擎会执行全数据检索,效率极低,且对资源有非常高的压力。

示例:get test_search/test_type/_search?q=eage:26 对搜索条件为中文支持不友好。

2.3分页搜索

默认情况下,Elasticsearch搜索返回结果是10条数据。从第0条开始查询。 size和from是es中具有特定含义的属性名。 语法:

2.4+/-搜索

2.5排序

DSL - Domain Specified Language , 特殊领域的语言。 请求参数是请求体传递的。在Elasticsearch中,请求体的字符集默认为UTF-8。

3.1查询所有数据

3.2match search(项目搜索功能使用此命令)

全文检索。要求查询条件拆分后的任意词条与具体数据匹配就算搜索结果。

3.3phrase search

短语检索。要求查询条件必须和具体数据完全匹配才算搜索结果。其特征是: 1.对搜索条件进行拆词 2.把拆词当作一个整体,整体去索引(索引是存储内容被拆词后的结果)中匹配,必须严格匹配(存储内容拆词后是:北京,大兴,朝阳,条件拆词是:北京,朝阳。这种情况是不能被查询的,因为北京和朝阳之前还有大兴。)才能查询到

3.4range

3.5多条件复合搜索

在一个请求体中,有多个搜索条件,就是复合搜索。如:搜索数据,条件为部门名称是Sales Department,员工年龄在20到26之间,部门员工姓名叫张三。上述条件中,部门名称为可选条件,员工年龄必须满足要求,部门员工姓名为可选要求。这种多条件搜索就是复合搜索。

3.6排序

在Elasticsearch的搜索中,默认是使用相关度分数实现排序的。可以通过搜索语法实现定制化排序。

注意:在Elasticsearch中,如果使用text类型的字段作为排序依据,会有问题。Elasticsearch需要对text类型字段数据做分词处理。如果使用text类型字段做排序,Elasticsearch给出的排序结果未必友好,毕竟分词后,先使用哪一个单词做排序都是不合理的。所以Elasticsearch中默认情况下不允许使用text类型的字段做排序,如果需要使用字符串做结果排序,则可使用keyword类型字段作为排序依据,因为keyword字段不做分词处理。

3.7分页

DSL分页也是使用from和size实现的。

3.8highlight display

本文地址:http://sjzytwl.xhstdz.com/quote/86461.html    物流园资讯网 http://sjzytwl.xhstdz.com/ , 查看更多

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


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