远大科技 网站建设,大庆哈尔滨网站建设,中国楼市最新消息2022,诚聘网站开发之前实践过的Elasticsearch到现在基本上的语法我都回忆不起来了#xff0c;所以准备写篇文章帮助自己复习一下#xff0c;没有什么技术含量的分享#xff0c;但是也分享给想初步了解的朋友们。就不介绍Elasticsearch了#xff0c;直接进入正文(手动分割线0.0)-------------… 之前实践过的Elasticsearch到现在基本上的语法我都回忆不起来了所以准备写篇文章帮助自己复习一下没有什么技术含量的分享但是也分享给想初步了解的朋友们。就不介绍Elasticsearch了直接进入正文(手动分割线0.0)------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------为了模拟真实场景建议大家在linux下安装Elasticsearch。Kibana是一个Elasticsearch索引库数据统计工具可以利用Elasticsearch的聚合功能生成各种图表而且还提供了操作Elasticsearch索引数据的控制台并且提供了一定的API提示非常有利于我们学习Elasticsearch的语法(划重点提供API提示)建议安装。启动后Kibana后选择左侧的DevTools菜单即可进入控制台页面1.基本概念Elasticsearch也是基于Lucene的全文检索库本质也是存储数据很多概念与MySQL类似的。对比关系索引(indices)--------------------------------Databases 数据库类型(type)-----------------------------Table 数据表 文档(Document)----------------Row 行 字段(Field)-------------------Columns 列2.创建索引Elasticsearch采用Rest风格API因此其API就是一次http请求你可以用任何工具发起http请求创建索引的请求格式请求方式PUT请求路径/索引库名请求参数json格式{ settings: { number_of_shards: 3, number_of_replicas: 2 }}number_of_shards分片数量number_of_replicas副本数量settings索引库的设置查看和删除分别使用get和delete请求即可。2.1 映射配置通俗的讲就是mysql数据库中的建表创建映射请求方式依然是PUTPUT /索引库名/_mapping/类型名称{ properties: { 字段名: { type: 类型, index: true store: true analyzer: 分词器 } }}类型名称就是前面type的概念类似于数据库中的不同表字段名任意填写 可以指定许多属性例如type类型可以是text、long、short、date、integer、object等index是否索引默认为truestore是否存储默认为falseanalyzer分词器Elasticsearch中支持的数据类型非常丰富他的String类型又分两种这个很有特色text可分词不可参与聚合keyword不可分词数据会作为完整字段进行匹配可以参与聚合2.1.2indexindex影响字段的索引情况。true字段会被索引则可以用来进行搜索。默认值就是truefalse字段不会被索引不能用来搜索index的默认值就是true但是有些字段是我们不希望被索引的比如商品的图片信息就设置index为false。2.1.3 store是否将数据进行额外存储。Elasticsearch在创建文档索引时会将文档中的原始数据备份保存到一个叫做_source的属性中。而且我们可以通过过滤_source来选择哪些要显示哪些不显示。而如果设置store为true就会在_source以外额外存储一份数据多余因此一般我们都会将store设置为false。默认就为false2.2 新增数据通过POST请求可以向一个已经存在的索引库中添加数据示例POST /test/goods/{ title:篮球, images:123, price:99}通过kibana查看数据get _search{ query:{ match_all:{} }}-----------------------------------------------------------------------------响应{ _index: test, _type: goods, _id: r9c1KGMBIhaxtY5rlRKv, _version: 1, _score: 1, _source: { title: 篮球, images: 123, price: 99 }}_source源文档信息所有的数据都在里面。_id这条文档的唯一标示与文档自己的id字段没有关联3. 查询我们从4块来讲查询基本查询_source过滤结果过滤高级查询排序3.1基本查询基本语法GET /索引库名/_search{ query:{ 查询类型:{ 查询条件:查询条件值 } }}这里的query代表一个查询对象里面可以有不同的查询属性查询类型例如match_all matchterm range 等等查询条件查询条件会根据类型的不同写法也有差异示例GET /test/_search{ query:{ match_all: {} }}query代表查询对象match_all代表查询所有------------------------------------------------------------------------------结果{ took: 2, timed_out: false, _shards: { total: 3, successful: 3, skipped: 0, failed: 0 }, hits: { total: 2, max_score: 1, hits: [ { _index: jiang, _type: goods, _id: 2, _score: 1, _source: { title: 篮球, images: 123, price: 99 } }, { _index: jiang, _type: goods, _id: r9c1KGMBIhaxtY5rlRKv, _score: 1, _source: { title: 足球, images: 123, price: 69 } } ] }}took查询花费时间单位是毫秒time_out是否超时_shards分片信息hits搜索结果总览对象_index索引库_type文档类型_id文档id_score文档得分_source文档的源数据total搜索到的总条数max_score所有结果中文档得分的最高分hits搜索结果的文档对象数组每个元素是一条搜索到的文档信息3.2匹配查询or关系match类型查询会把查询条件进行分词然后进行查询,多个词条之间是or的关系GET /test/_search{ query:{ match:{ title:小米电视 } }}结果不仅会查询到电视而且与小米相关的都会查询到多个词之间是or的关系。-------------------------------------------------------------------------------------------------------and关系某些情况下我们需要更精确查找我们希望这个关系变成and可以这样做GET /test/_search{ query:{ match: { title: { query: 小米电视, operator: and } } }}这样只有同时包含小米和电视的词条才会被搜索到。3.3多字段查询multi_match与match类似不同的是它可以在多个字段中查询结果我们会在title字GET /test/_search{ query:{ multi_match: { query: 小米, fields: [ title, subTitle ] } }}段和subtitle字段中查询小米这个词3.4词条匹配(term)term 查询被用于精确值 匹配这些精确值可能是数字、时间、布尔或者那些未分词的字符串GET /test/_search{ query:{ term:{ price:2699.00 } }}3.5结果过滤默认情况下elasticsearch在搜索的结果中会把文档中保存在_source的所有字段都返回。如果我们只想获取其中的部分字段我们可以添加_source的过滤GET /test/_search{ _source: [title,price], query: { term: { price: 2699 } }}------------------------------------------------------------------------------------------------------------突然发现有点晚了还是下次再继续介绍高级查询和聚合的使用好了。。。。。。。。。。。敬请期待~~~~~~~~~~~