ElasticSearch入门

技术分享——ElasticSearch

一、ElasticSearch简介

1.概念

Elasticsearch是一个基于Lucene搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

2.结构组成

  • 索引是ElasticSearch存放数据的地方,可以理解为关系型数据库中的一个数据库。事实上,我们的数据被存储和索引在分片(shards)中,索引只是一个把一个或多个分片分组在一起的逻辑空间。然而,这只是一些内部细节——我们的程序完全不用关心分片。对于我们的程序而言,文档存储在索引(index)中。剩下的细节由Elasticsearch关心既可。(索引的名字必须是全部小写,不能以下划线开头,不能包含逗号)
  • 类型用于区分同一个索引下不同的数据类型,相当于关系型数据库中的表。在Elasticsearch中,我们使用相同类型(type)的文档表示相同的“事物”,因为他们的数据结构也是相同的。每个类型(type)都有自己的映射(mapping)或者结构定义,就像传统数据库表中的列一样。所有类型下的文档被存储在同一个索引下,但是类型的映射(mapping)会告诉Elasticsearch不同的文档如何被索引。
  • 文档是ElasticSearch中存储的实体,类比关系型数据库,每个文档相当于数据库表中的一行数据。 在Elasticsearch中,文档(document)这个术语有着特殊含义。它特指最顶层结构或者根对象(root object)序列化成的JSON数据(以唯一ID标识并存储于Elasticsearch中)。
  • 文档由字段组成,相当于关系数据库中列的属性,不同的是ES的不同文档可以具有不同的字段集合。

对比关系型数据库:

1)、Relational DB -> Databases -> Tables -> Rows -> Columns

2)、Elasticsearch -> Indices -> Types -> Documents -> Fields

注意点:ElasticSearch7.x版本之后,类型(types)被废弃。

原因:因为 Elasticsearch 设计初期,是直接查考了关系型数据库的设计模式,存在了 type(数据表)的概念。但是,其搜索引擎是基于 Lucene 的,这种 “基因”决定了 type 是多余的。 Lucene 的全文检索功能之所以快,是因为 倒序索引 的存在。而这种 倒序索引 的生成是基于 index 的,而并非 type。多个type 反而会减慢搜索的速度。

3.数据类型

  

 

注意点:

1)、 keyword类型的字段只能通过精确值搜索到。

2)、在ElasticSearch中,没有专门的数组(Array)数据类型,但是,在默认情况下,任意一个字段都可以包含0或多个值,这意味着每个字段默认都是数组类型,只不过,数组类型的各个元素值的数据类型必须相同。在ElasticSearch中,数组是开箱即用的(out of box),不需要进行任何配置,就可以直接使用。在同一个数组中,数组元素的数据类型是相同的,ElasticSearch不支持元素为多个数据类型:[ 10, “some string” ],常用的数组类型是

字符数组: [ “one”, “two” ]

整数数组: productid:[ 1, 2 ]

对象(文档)数组:

“user”:[ { “name”: “Mary”, “age”: 12 }, { “name”: “John”, “age”: 10 }],

ElasticSearch内部把对象数组展开为

{“user.name”: [“Mary”, “John”], “user.age”: [12,10]}

实例索引:

 

{

"state":"open",

"settings":{

"index":{

"creation_date":"1644543225849",

"number_of_shards":"5",

"number_of_replicas":"1",

"uuid":"T6FD41z5T7WSBTl4NiodzA",

"version":{

"created":"6020299"

},

"provided_name":"estest"

}

},

"mappings":{

"external":{

"properties":{

"eventId":{

"type":"text",

"fields":{

"keyword":{

"ignore_above":256,

"type":"keyword"

}

}

},

"pagePosition":{

"type":"text",

"fields":{

"keyword":{

"ignore_above":256,

"type":"keyword"

}

}

},

"app_type":{

"type":"text",

"fields":{

"keyword":{

"ignore_above":256,

"type":"keyword"

}

}

},

"system":{

"properties":{

"brand":{

"type":"text",

"fields":{

"keyword":{

"ignore_above":256,

"type":"keyword"

}

}

}

}

},

"costTime":{

"type":"long"

},

"sysName":{

"type":"text",

"fields":{

"keyword":{

"ignore_above":256,

"type":"keyword"

}

}

},

"eventName":{

"type":"text",

"fields":{

"keyword":{

"ignore_above":256,

"type":"keyword"

}

}

},

"recordDate":{

"type":"date"

},

"session_id":{

"type":"text",

"fields":{

"keyword":{

"ignore_above":256,

"type":"keyword"

}

}

},

"id":{

"type":"text",

"fields":{

"keyword":{

"ignore_above":256,

"type":"keyword"

}

}

},

"pageName":{

"type":"text",

"fields":{

"keyword":{

"ignore_above":256,

"type":"keyword"

}

}

},

"extendField":{

"type":"text",

"fields":{

"keyword":{

"ignore_above":256,

"type":"keyword"

}

}

}

}

}

}

}

二、ElasticSearch之---分词器

1.概念:是将用户输入的一段文本,分析成符合逻辑的一种工具。

2.举例 http://localhost:9200/_analyze

1).ElasticSearch默认分词器

{

"analyzer": "standard",

"text": "我就是思为最帅的男人"

}

 

{

"tokens":[

{

"token":"我",

"start_offset":0,

"end_offset":1,

"type":"<IDEOGRAPHIC>",

"position":0

},

{

"token":"就",

"start_offset":1,

"end_offset":2,

"type":"<IDEOGRAPHIC>",

"position":1

},

{

"token":"是",

"start_offset":2,

"end_offset":3,

"type":"<IDEOGRAPHIC>",

"position":2

},

{

"token":"思",

"start_offset":3,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值