ElasticSearch 7.x 入门与实战
Posted chris3will
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch 7.x 入门与实战相关的知识,希望对你有一定的参考价值。
为了让项目的性能更好,检索的效率更高,考虑引入elasticsearch中间件。
我们的服务器环境为centos7,综合版本考虑,springboot的插件与服务器中都装7.x版本的
比较新,也比较多特性支持。
ElasticSearch简介
ElasticSearch是一个开源的分布式搜索引擎,它使用Lucene作为底层引擎,提供了分布式多租户全文搜索、实时数据分析和可视化等功能。其主要优势包括:
- 高性能:ElasticSearch采用分布式架构,可以快速处理大量数据,支持实时搜索和分析。
- 可扩展性:ElasticSearch支持水平扩展,可以通过添加新的节点来扩展集群,实现高可用和负载均衡。
- 灵活性:ElasticSearch提供了丰富的API接口,可以方便地进行数据索引、搜索和分析等操作,同时也支持自定义插件和扩展。
- 易用性:ElasticSearch提供了友好的Web界面和命令行工具,可以方便地进行管理和监控。
其底层实现原理主要包括:
- 分片存储:ElasticSearch将数据分成多个片段进行存储和索引,每个片段可以独立管理和查询,提高了搜索效率和可扩展性。
- 倒排索引:ElasticSearch使用Lucene的倒排索引技术,将文档中的每个词都建立一个索引表,可以快速定位包含该词的文档。
- 分布式搜索:ElasticSearch采用分布式搜索技术,将查询请求发送到所有节点进行处理,然后将结果合并返回给客户端。
ElasticSearch可以用在很多地方,包括:
- 搜索引擎:ElasticSearch可以作为企业内部搜索引擎或者网站搜索引擎,提供高效的全文搜索功能。
- 数据分析:ElasticSearch可以用于实时数据分析和可视化,支持聚合、过滤和排序等操作。
- 日志管理:ElasticSearch可以用于日志管理和监控,支持实时索引和搜索。
- 地理空间搜索:ElasticSearch支持地理空间搜索,可以用于位置数据的搜索和分析。
简要说明es工作流程
-
安装elasticsearch:首先需要在本地或服务器上安装elasticsearch。可以从官网下载适合操作系统的安装包,安装完成后启动elasticsearch。
-
创建索引:在elasticsearch中,数据存储在索引中。因此,我们需要先创建索引。可以使用命令行或elasticsearch的REST API来创建索引。以下是使用REST API创建索引的示例:
PUT /article
"settings":
"number_of_shards": 1,
"number_of_replicas": 0
在上述示例中,我们创建了名为“article”的索引,并设置了一个分片和零个副本。
3. 添加文档:在elasticsearch中,文档是最小的单位。我们可以使用REST API将文档添加到索引中。以下是一个添加文档的示例:
POST /article/_doc
"title": "My Document",
"content": "This is my first document in Elasticsearch"
4. 查询数据:可以使用elasticsearch的REST API来查询数据。以下是一个简单的查询示例:
GET /article/_search
"query":
"match":
"title": "document"
在上述示例中,我们查询了包含“document”这个词的文档。elasticsearch将返回匹配的文档列表。我们则根据这个列表进行再包装即可。
面试过程中,知道其底层使通过倒排索引来实现的快速查询。其可以构建多个node,也可以指定shards来进行分片,提高搜索效率与可扩展性。
我们要做的就是建立索引,确定合适的mappings,明确关键字的type使keyword(大小写敏感),还是text。为不同字段确定分词器ngrem还是ik分词器(支持中文)等。
我们重点查询过程中query的模式使match还是item。
我们用的模糊查询使用wildcard还是fuzzy还是正则表达式,抑或是prefix匹配,query string等,可以根据实际性能和查询的内容来实际测试并决定。(毕竟有的支持运算符,但是我们也要实际满足我们的要求)
我们这边决定用于文章的标题,text的形式模糊查询。如果要结合文章的短描述,可以结合multiquerybuilder来构建查询语句,实现对多个字段的查询,以加快查询速度。
仍在更新中...
Elasticsearch 顶尖高手--快速入门案例实战:多种搜索方式
1.query string search
GET /ecommerce/product/_search
took:耗费了几毫秒
timeout:是否超时
_shards:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard(或者是它的某个relica shard也可以)
hist.total:查询结果的数量,4个total
max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也越高
hits.hits:包含了匹配搜索的document的详细数据
搜索商品名称中包含yagao的商品,而且按照售价降序排序:GET /ecommerce/product/_search?q=name:yagao&sort=price:desc
适用于临时的在命令行使用一些工具,比如curl,快读的发出请求,来检索想要的信息。但是如果查询请求很复杂,是很难去构建的,在生产环境中,几乎很少使用query string search
2.query DSL
DSL: Domain Specified Language 特定领域的语言
http request body :请求体,可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法,比query string search 更加强大
查询所有商品
GET /ecommerce/product/_search
{
“query”:{“match_all”:{}}
}
查询名称包含yagao 的商品,同时按照价格降序排序
GET /ecommerce/product/_search
{
“query”:{
“match”:{
“name”:”yagao”
}
},
“sort”:[
{“price”:”desc”}
]
}
分页查询商品,总共3条商品,假设每页就显示1条商品, 现在显示第二页,所以就查出第二个商品
GET /ecommerce/product/_search
{
“query”:{“match_all”:{}},
“from”:1,
“size”:2
}
指定要查询出来商品的名称和价格
GET /ecommerce/product/_search
{
“query”:{“match_all”:{}},
“_source”:[“name”,”price”]
}
3.query filter(对数据进行过滤)
搜索商品名称包含yagao,而且售价大于25元的商品
GET /ecommerce/product/_search
{
“query”:{
“bool”:{
“must”:[
{“match”:{“name”:”yagao”}}
]
},
“filter”:{
“range”:{
“price”:{
“gt”:25
}
}
}
}
}
4.full-test search(全文检索)
GET /ecommerce/product/_search
{
“query”:{
“match”:{
“product”:”yagao producer”
}
}
}
producer 会被拆解开,建立倒排索引
special 5
yagao 5
producer 1,2,3,5
gaolujie 1
zhonghua 3
jiajieshi 2
最终会找到匹配的最多的那一条数据,也就是所谓的匹配度最高
5.phrase search(全文搜索)
跟全文搜索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回
phrase search,要求输入的搜索串,必须在指定的字段文本中, 完全包含一摸一样的,才可以算匹配,才能作为结果返回。
GET /ecommerce/product/_search
{
“query”:{
“match_phrase”:{“product”:”yagao producter”}
}
}
只返回了一条数据,因为要求全匹配
6.heighlight search(高亮搜索)
GET /ecommerce/product/_search
{
“query”:{
“match”:{
“product”:”producter”
}
},
“highlight”:{
“fields”:{
“product”:{}
}
}
}
以上是关于ElasticSearch 7.x 入门与实战的主要内容,如果未能解决你的问题,请参考以下文章