ElasticSearch入门

一、ES是什么

        ES官网:https://www.elastic.co/cn/elasticsearch

        ES是什么(官方解释):Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析,并轻松缩放规模。

        个人觉得,ES就是专门用于搜索而产生的数据库,它能基于算法对海量数据实现快速的查找功能。

二、为什么要用ES

        同为拥有查询功能的数据库例如mysql也能够实现数据的快速查找功能为何还需要专门使用ES?

        因为数据库的查询它是基于sql语句,有了sql之后需要遍历整一张相关的数据库表,随后返回给你需要的数据,但如果此时数据量特别大,使用数据库查询的的效率会非常慢,而ES采用倒排索引的功能能够快速的实现全文检索;并且ES有很强大的分词搜索功能(可以理解为传统数据库的模糊查询),在输入关键词后ES会自动对关键词进行分词从而查询出所有和该词相关的信息,这点也是传统数据库的模糊查询所不能比拟的。

什么是倒排索引

        了解倒排索引前我们首先需要知道正排索引

        倒排索引:将标题的关键字进行拆分,记录每个拆分后的关键词在正排索引中出现的位置

三、ES的下载和安装(以mac m1芯片为例)

        ES的安装见该文章:https://blog.csdn.net/m0_68772878/article/details/134452544

        ES插件,ik分词器的安装:

         如果不安装ik分词器,只能使用ES自带的标准分词模式,在标准分词模式下,分词的精细程度并不完全,并且只能够对英文进行友好的分词,如果是进行中文分词,它的结果是将整句话拆成一个一个的字,这并不符合我们日常的阅读习惯和检索习惯

        下载地址:https://blog.csdn.net/m0_68772878/article/details/134452544

        下载好后,将下载的压缩包解压指至ES所在目录的plugins目录内,运行ES服务后,看到如下内容并且不报错表示ik分词器插件运行正常

        注意:下载ik分词器的版本必须要和ES的版本保持一致,否则会在启动ES服务时报错或者或者导致使用ik分词功能不可用

        IK分词器版本与ES版本不一致的解决方式:

        找到ik分词器插件目录,进入该目录后找到plugin-descriptor.properties文件,搜索'version': plugin's version关键词条,将version改成对应的ES版本,我这里使用的是8.11.1,因此🔽


        

四、ES的核心概念

        1、Document:文档

                相当于就是一条由多个字段的内容合并而成的一条信息,通常以Json格式进行保存

        2、Field:字段

                相当于列,定义每个document应该有的字段

        3、Index:索引

                文档存储的地方,类似于MySQL数据库中的数据库概念

        五、技术测试(在没有进行springboot整合前,我们使用HttpRequest的形式进行测试)

                1、访问ES首页:

#发送访问elasticsearch服务的请求
GET http://localhost:9200

                  2、发送分词请求

                注意:在同一个页面中两次请求之间需要用“###”进行分隔,否则下一个请求无法实现

###发送分词请求
POST http://localhost:9200/_analyze
Content-Type: application/json

{
  "text": "hello,i like learn java",
  "analyzer": "standard"

}

                3、指定分词模式为ik_smart

                     分词模式讲解:

                           ik_smart分词模式可以理解为是只能分词模式,在使用ik分词器后,  如果使用

                        smart模式,它会自动并且快速的帮我们将文本进行分词,他的速度快,占用空间

                        较小,但是分词仍然比较粗略

###使用ik分词器,指定分词模式为ik_smart
POST http://localhost:9200/_analyze
Content-Type: application/json

{
  "text": "我们是中华人民共和国的公民,享有同等的权利和义务",
  "analyzer": "ik_smart"

}

                4、指定分词模式为ik_max_word        

                        分词模式讲解:

                                能够将文本详细的进行分词,查询时查全率高,但是较耗费性能,查询速度比

                        较慢

###使用ik分词器,指定分词模式为ik_max_word
POST http://localhost:9200/_analyze
Content-Type: application/json

{
  "text": "我们是中华人民共和国的公民,享有同等的权利和义务",
  "analyzer": "ik_max_word"

}

                5、设置停止词:

                        设置略过词,当分词遇到这些词语时会自动略过。

                        找到ik分词器插件,找到config目录,进入目录后找到stopword.dic文件,添加也无

                需要的停止词后保存,重新运行ES服务,使用http请求设置需要分词的text,即可看到停

                止词没有被今次那个分词操作

                6、创建和删除一个索引:

                        创建索引我们需要在请求的后方添加索引的名字,例如这里取名为question

PUT http://localhost:9200/question

                        删除索引我们需要将请求方式变更为DELETE

DELETE http://localhost:9200/question

               7、设置索引的“属性”:              

###给索引设置属性,设置索引中的数据自动分词

# properties表示要设置的具体属性
#title 和content表示我们要设置分词的具体字段(即我们要给哪些列设置分词)
# analyzer和search_analyzer表示不仅在索引中会有分词规则,我们输入的查询关键字也会进行分词

POST http://localhost:9200/question/_mapping
Content-Type: application/json

{
  "properties": {
    "title": {
      "type": "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_max_word"
    },
    "content": {
      "type": "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_max_word"
    }
  }
}

                 8、添加文档(Document):

###添加文档(给每个字段添加值)

#请求当中的数字1和下方的id=1没有任何关系,请求的数字1表示该行(文档)的编号,而id=1表示这条数据的编号

POST http://localhost:9200/question/_create/1
Content-Type: application/json

{
  "id": 1,
  "title": "docker是什么",
  "content": "他是能够运行镜像文件的虚拟机"
}

                注意:不同ES版本的请求方式可能有所不同,如果执行请求出现“error“ : “no handler found for uri [xxx] and method [POST]或者[GET]”错误需要考虑是否是请求格式有误,解决方案可查看:“error“ : “no handler found for uri [xxx] and method [POST]或者[GET]”-CSDN博客

              9、查询文档:

                        数字“3”表示文档编号,而不是文档内的id编号

GET http://localhost:9200/question/_doc/3

                10、修改某个文档内的响应字段的值

POST http://localhost:9200/question/_update/3
Content-Type: application/json

{
  "doc": {
    "title": "'=='比较的是什么,equal比较的是什么",
    "content": "==比较的是变量的值,equal比较的是引用地址"
  }
}

                11、删除某一条文档数据:

DELETE http://localhost:9200/question/_doc/3

                12、指定字段进行查询:

###指定字段进行查询文档数据

#query和match格式固定不变,表示要查询和匹配,匹配的格式写在match里

POST http://localhost:9200/item/_search
Content-Type: application/json

{
  "query": {
    "match": {
      "字段名": "查询的关键词"
    }
  }
}

                13、指定多字段进行查询:

                                如下查询条件返回的结果是即符合字段名1的值又符合字段名2的值的文档,如

                果希望返回满足其一的结果数据,可以把must修改为should,“should”相当于mysql语句

                中的or

###指定多字段查询

#query{bool{must[{match{字段名1}},match{字段名2}}]}}
#query表示查询,bool表示要查询多个字段,must相当于mysql语句中的and

POST http://localhost:9200/question/_search
Content-Type: application/json

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "字段名1": "查询的关键词"
          }
        },
        {
          "match": {
            "字段名2": "查询的关键词"
          }
        }

      ]
    }
  }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零度可乐不加冰

感谢打赏,您的认可是我的荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值