ElasticSearch 7.x 入门与实战

Posted chris3will

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch 7.x 入门与实战相关的知识,希望对你有一定的参考价值。

为了让项目的性能更好,检索的效率更高,考虑引入elasticsearch中间件。

我们的服务器环境为centos7,综合版本考虑,springboot的插件与服务器中都装7.x版本的

比较新,也比较多特性支持。


ElasticSearch简介

ElasticSearch是一个开源的分布式搜索引擎,它使用Lucene作为底层引擎,提供了分布式多租户全文搜索、实时数据分析和可视化等功能。其主要优势包括:

  1. 高性能:ElasticSearch采用分布式架构,可以快速处理大量数据,支持实时搜索和分析。 
  2. 可扩展性:ElasticSearch支持水平扩展,可以通过添加新的节点来扩展集群,实现高可用和负载均衡。 
  3. 灵活性:ElasticSearch提供了丰富的API接口,可以方便地进行数据索引、搜索和分析等操作,同时也支持自定义插件和扩展。 
  4. 易用性:ElasticSearch提供了友好的Web界面和命令行工具,可以方便地进行管理和监控。 

底层实现原理主要包括:

  1. 分片存储:ElasticSearch将数据分成多个片段进行存储和索引,每个片段可以独立管理和查询,提高了搜索效率和可扩展性。 
  2. 倒排索引:ElasticSearch使用Lucene的倒排索引技术,将文档中的每个词都建立一个索引表,可以快速定位包含该词的文档。 
  3. 分布式搜索:ElasticSearch采用分布式搜索技术,将查询请求发送到所有节点进行处理,然后将结果合并返回给客户端。 

ElasticSearch可以用在很多地方,包括:

  1. 搜索引擎:ElasticSearch可以作为企业内部搜索引擎或者网站搜索引擎,提供高效的全文搜索功能。 
  2. 数据分析:ElasticSearch可以用于实时数据分析和可视化,支持聚合、过滤和排序等操作。 
  3. 日志管理:ElasticSearch可以用于日志管理和监控,支持实时索引和搜索。 
  4. 地理空间搜索:ElasticSearch支持地理空间搜索,可以用于位置数据的搜索和分析。

简要说明es工作流程

  1. 安装elasticsearch:首先需要在本地或服务器上安装elasticsearch。可以从官网下载适合操作系统的安装包,安装完成后启动elasticsearch。

  2. 创建索引:在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 入门与实战的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch 7.X 进阶实战视频课上线

Elasticsearch 7.X 进阶实战视频课上线

Elasticsearch 7.x从入门到精通

《自然语言处理实战入门》 文本检索 ---- ElasticSearch 概念与操作

elasticsearch技术解析与实战 入门和索引

ElasticSearch实战-索引优化建议与原则