当前位置: 代码网 > it编程>编程语言>Java > 全文检索工具elasticsearch:第一章:理论知识

全文检索工具elasticsearch:第一章:理论知识

2024年08月02日 Java 我要评论
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来” />

cluster

整个elasticsearch 默认就是集群状态,整个集群是一份完整、互备的数据。

node

集群中的一个节点,一般只一个进程就是一个node

shard

分片,即使是一个节点中的数据也会通过hash算法,分成多个片存放,默认是5片。

index

相当于rdbms的database, 对于用户来说是一个逻辑数据库,虽然物理上会被分多个shard存放,也可能存放在多个node中。

type

类似于rdbms的table,但是与其说像table,其实更像面向对象中的class , 同一json的格式的数据集合。

document

类似于rdbms的 row、面向对象里的object

field

相当于字段、属性

利用kibana学习 elasticsearch restful api (dsl)****


执行bin目录下的kibana程序:

cd /opt/kibana-5.6.4-linux-x86_64/bin

./kibana

es中保存的数据结构

public class  movie {

 string id;

     string name;

     double doubanscore;

     list<actor> actorlist;

}

 

public class actor{

string id;

string name;

}

这两个对象如果放在关系型数据库保存,会被拆成2张表,但是elasticsearch是用一个json来表示一个document。

所以他保存到es中应该是:

{

  “id”:”1”,

  “name”:”operation red sea”,

  “doubanscore”:”8.5”,

  “actorlist”:[  

{“id”:”1”,”name”:”zhangyi”},

{“id”:”2”,”name”:”haiqing”},

{“id”:”3”,”name”:”zhanghanyu”}

]

}

对数据的操作增删改查

查看es中有哪些索引

get /_cat/indices?v

es 中会默认存在一个名为.kibana的索引

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

yellow open .kibana sbdz-v6yqmwx9gaqomsqqg 1 1 1 0 3.2kb 3.2kb

表头的含义

health

green(集群完整) yellow(单点正常、集群不完整) red(单点不正常)

status

是否能使用

index

索引名

uuid

索引统一编号         

pri

主节点几个

rep

从节点几个

docs.count

文档数

docs.deleted

文档被删了多少

store.size

整体占空间大小

pri.store.size

主节点占

增加一个索引

put /movie_index

{

“acknowledged”: true,

“shards_acknowledged”: true,

“index”: “movie_index”

}

删除一个索引

es 是不删除也不修改任何数据

delete /movie_index

{

“acknowledged”: true

}

新增文档

格式 :put /index/type/id

put /movie_index/movie/1

{ "id":1,

  "name":"operation red sea",

  "doubanscore":8.5,

  "actorlist":[  

{"id":1,"name":"zhang yi"},

{"id":2,"name":"hai qing"},

{"id":3,"name":"zhang han yu"}

]

}

put /movie_index/movie/2

{

  "id":2,

  "name":"operation meigong river",

  "doubanscore":8.0,

  "actorlist":[  

{"id":3,"name":"zhang han yu"}

]

}

 

put /movie_index/movie/3

{

  "id":3,

  "name":"incident red sea",

  "doubanscore":5.0,

  "actorlist":[  

{"id":4,"name":"zhang chen"}

]

}

如果之前没建过index或者type,es 会自动创建。

直接用id查找

get movie_index/movie/1

修改**—**整体替换

和新增没有区别

put /movie_index/movie/3

{

  "id":"3",

  "name":"incident red sea",

  "doubanscore":"5.0",

  "actorlist":[  

{"id":"1","name":"zhang chen"}

]

}

修改**—某个字段******

post movie_index/movie/3/_update

{

  "doc": {

    "doubanscore":"7.0"

  }

}

修改**—某个字段和**** 修改****—**整体替换二者选一,否则:

删除一个document

delete movie_index/movie/3

{

“found”: true,

“_index”: “movie_index”,

“_type”: “movie”,

“_id”: “3”,

“_version”: 18,

“result”: “deleted”,

“_shards”: {

“total”: 2,

“successful”: 1,

“failed”: 0

}

}

搜索type全部数据

get movie_index/movie/_search

结果

{

  "took": 2,    //耗费时间 毫秒

  "timed_out": false, //是否超时

  "_shards": {

    "total": 5,   //发送给全部5个分片

    "successful": 5,

    "skipped": 0,

    "failed": 0

  },

  "hits": {

    "total": 3,  //命中3条数据

    "max_score": 1,   //最大评分

    "hits": [  // 结果

      {

        "_index": "movie_index",

        "_type": "movie",

        "_id": 2,

        "_score": 1,

        "_source": {

          "id": "2",

          "name": "operation meigong river",

          "doubanscore": 8.0,

          "actorlist": [

            {

              "id": "1",

              "name": "zhang han yu"

            }

          ]

        }

          。。。。。。。。

          。。。。。。。。

      }

按条件查询(全部)

get movie_index/movie/_search

{

  "query":{

    "match_all": {}

  }

}

按分词查询

get movie_index/movie/_search

{

  "query":{

    "match": {"name":"red"}

  }

}

注意结果的评分

按分词子属性查询

get movie_index/movie/_search

{

  "query":{

    "match": {"actorlist.name":"zhang"}

  }

}

结果:

{

“took”: 2,

“timed_out”: false,

“_shards”: {

“total”: 5,

“successful”: 5,

“skipped”: 0,

“failed”: 0

},

“hits”: {

“total”: 2,

“max_score”: 1,

“hits”: [

{

“_index”: “movie_index”,

“_type”: “movie”,

“_id”: “2”,

“_score”: 1,

“_source”: {

“id”: 2,

“name”: “operation meigong river”,

“doubanscore”: 8,

“actorlist”: [

{

“id”: 3,

“name”: “zhang han yu”

}

]

}

},

{

“_index”: “movie_index”,

“_type”: “movie”,

“_id”: “1”,

“_score”: 1,

“_source”: {

“id”: 1,

“name”: “operation red sea”,

“doubanscore”: 8.5,

“actorlist”: [

{

“id”: 1,

“name”: “zhang yi”

},

{

“id”: 2,

“name”: “hai qing”

},

{

“id”: 3,

“name”: “zhang han yu”

}

]

}

}

]

}

}

match phrase

get movie_index/movie/_search

{

    "query":{

      "match_phrase": {"name":"operation red"}

    }

}

按短语查询,不再利用分词技术,直接用短语在原始数据中匹配

我就不发结果了,太长的博客也不好看。

fuzzy查询

get movie_index/movie/_search

{

    "query":{

      "fuzzy": {"name":"rad"}

    }

}

校正匹配分词,当一个单词都无法准确匹配,es通过一种算法对非常接近的单词也给与一定的评分,能够查询出来,但是消耗更多的性能。

过滤–查询后过滤

get movie_index/movie/_search

{

    "query":{

      "match": {"name":"red"}

    },

    "post_filter":{

      "term": {

        "actorlist.id": 3

      }

    }

}

先查询后过滤效率慢,好比,我先从全国所有人中先过滤其他省份的留下广东的,再查询比先查询全国所有人再过滤广东的

过滤–查询前过滤(推荐)

get movie_index/movie/_search

{

    "query":{

        "bool":{

          "filter":[ {"term": {  "actorlist.id": "1"  }},

                     {"term": {  "actorlist.id": "3"  }}

           ],

           "must":{"match":{"name":"red"}}

         }

    }

}

过滤–按范围过滤

get movie_index/movie/_search

{

   "query": {

     "bool": {

       "filter": {

         "range": {

            "doubanscore": {"gte": 8}

         }

       }

     }

   }

}

关于范围操作符:

gt

大于

lt

小于

gte

大于等于

lte

小于等于

排序

get movie_index/movie/_search

{

  "query":{

    "match": {"name":"red sea"}

  }

  , "sort": [

    {

      "doubanscore": {

        "order": "desc"

      }

    }

  ]

}

这个先按名称后按red sea排序

分页查询

get movie_index/movie/_search

{

  "query": { "match_all": {} },

  "from": 1,

  "size": 1

}

指定查询的字段

get movie_index/movie/_search

{

  "query": { "match_all": {} },

  "_source": ["name", "doubanscore"]

}

先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、oppo等大厂,18年进入阿里一直到现在。

深知大多数初中级java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以扫码领取!

img

文末

我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份pdf文档

  • 第一个要分享给大家的就是算法和数据结构

网易严选java开发三面面经:hashmap+jvm+索引+消息队列

  • 第二个就是数据库的高频知识点与性能优化

网易严选java开发三面面经:hashmap+jvm+索引+消息队列

  • 第三个则是并发编程(72个知识点学习)

网易严选java开发三面面经:hashmap+jvm+索引+消息队列

  • 最后一个是各大java架构专题的面试点+解析+我的一些学习的书籍资料

网易严选java开发三面面经:hashmap+jvm+索引+消息队列

还有更多的redis、mysql、jvm、kafka、微服务、spring全家桶等学习笔记这里就不一一列举出来

ommunity.csdnimg.cn/images/e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />

文末

我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份pdf文档

  • 第一个要分享给大家的就是算法和数据结构

[外链图片转存中…(img-hleiipkd-1711492042847)]

  • 第二个就是数据库的高频知识点与性能优化

[外链图片转存中…(img-5s8qwhp2-1711492042847)]

  • 第三个则是并发编程(72个知识点学习)

[外链图片转存中…(img-kvilixyp-1711492042847)]

  • 最后一个是各大java架构专题的面试点+解析+我的一些学习的书籍资料

[外链图片转存中…(img-heictwni-1711492042847)]

还有更多的redis、mysql、jvm、kafka、微服务、spring全家桶等学习笔记这里就不一一列举出来

需要更多java资料的小伙伴可以帮忙点赞+关注,,即可免费领取!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com