ElasticSearch基本api操作

这篇具有很好参考价值的文章主要介绍了ElasticSearch基本api操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ElasticSearch

本文章下列所用es本意都为Elaticsearch

ElasticSearch概述

Elaticsearch ,简称为es, es是一 个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,
可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索弓和搜
索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
据国际权威的数据库产品评测机构DB Engines的统计,在2016年1月, ElasticSearch已超过Solr等,成为排名第一-的搜索引擎类应
用。

安装ElasticSearch

官网地址

https://www.elastic.co/cn/downloads/elasticsearch

ElasticSearch基本api操作

目录结构

ElasticSearch基本api操作

bin 启动文件
config 配置文件
 log4j2日 志配置文件
 jvm. options java 虚拟机相关的配置
 elasticsearch. ym1 elasticsearch的配置文件!默认 9200端口!跨域!
1ib 相关jar包
1ogs 日志!
modules 功能模块
plugins插件! ik

进入bin文件夹启动elasticsearch.bat

访问http://localhost:9200

ElasticSearch基本api操作

安装elasticsearch-head插件

1.安装

GitHub地址https://github.com/mobz/elasticsearch-head

ElasticSearch基本api操作

2.启动

npm install
npm run start

3.连接测试发现,存在跨域问题:配置es

ElasticSearch基本api操作

在config文件夹的elasticsearch.yml文件中添加

http.cors.enabled: true
http.cors.allow-origin: "*"

访问http://localhost:9100/

4.重启es再次连接

ElasticSearch基本api操作

安装Kibana

Kibana是一个针对Elasticsearch的开源分析及 可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。 使用Kibana ,
可以通过各种图表进行高级数据分析及展示。Kibana让海 量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪
表板( dashboard )实时显示Elasticsearch查询动态。设置Kibana非常简单。无需编码或者额外的基础架构,几分钟内就可以完成
Kibana安装并启动Elasticsearch索弓|监测。
官网: https://www.elastic.co/cn/kibana

ElasticSearch基本api操作

1.启动kibana.bat

ElasticSearch基本api操作

2.访问5601端口

3.开发工具!( Post、 curl、head、谷歌浏览器插件测试! )

4.汉化

找到zh-cn.json,这里是汉化文件
ElasticSearch基本api操作

ElasticSearch基本api操作

在kibana.yml中添加

i18n.locale: "zh-CN"

ES核心概念

elasticsearch是面对文档,这里与关系型数据库进行对比

Relational Database elasticsearch
数据库(database) 索引(indices)
表(tables) types
行(rows) documents
字段(columns) fields

elasticsearch(集群)中可以包含多个索引(数据库) ,每个索引中可以包含多个类型(表) ,每个类型下又包含多个文档(行) ,每个文档中又包含多个字段(列)。.

物理设计

es在后台把每个索引划分为多个分片,每个分片可以在集群中的不同服务器间迁移

默认名称就是es

逻辑设计

一个索引类型中,包含多个文档,比如说文档1,文档2。当我们索引一 篇文档时,可以通过这样的一各顺序找到它:索引D类型
D文档ID,通过这个组合我们就能索引到某个具体的文档。 注意:ID不必是整数,实际上它是个字符串。

文档

elasticsearch是面向文档的,意味着索引和搜索数据的最小单位是文档, elasticsearch中,文档有几个重要属性:
自我包含,一篇文档同时包含字段和对应的值,也就是同时包含key:value !
可以是层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的! {就是一个json对象 ! fastjson进行自动转换 ! }
灵活的结构,文档不依赖预先定义的模式,我们知道关系型数据库中,要提前定义字段才能使用,在elasticsearch中,对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态的添加一个新的字段。

尽管我们可以随意的新增或者忽略某个字段,但是,每个字段的类型非常重要,比如一个年龄字段类型,可以是字符串也可以是整
形。因为elasticsearch会保存字段和类型之间的映射及其他的设置。这种映射具体到每个映射的每种类型,这也是为什么在
elasticsearch中,类型有时候也称为映射类型。

类型

类型是文档的逻辑容器,就像关系型数据库一样,表格是行的容器。类型中对于字段的定义称为映射,比如name映射为字符串
类型。我们说文档是无模式的 ,它们不需要拥有映射中所定义的所有字段,比如新增一个字段,那么elasticsearch是怎么做的呢?

答:

elasticsearch会自动的将新字段加入映射,但是这个字段的不确定它是什么类型, elasticsearch就开始猜,如果这个值是18 ,那么
elasticsearch会认为它是整形。但是elasticsearch也可能猜不对 ,所以最安全的方式就是提前定义好所需要的映射,这点跟关系
型数据库殊途同归了,先定义好字段,然后再使用.

索引(可以理解为数据库)

索引是映射类型的容器, elasticsearch中的索引是一个非常大的文档集合。索引存储了映射类型的字段和其他设置。然后它们被存储到了各个分片上

物理设计

节点和分片,如何工作的

一个集群至少有一一个节点,而一个节点就是一个elasricsearch进程 ,节点可以有多个索引默认的,如果你创建索引,那么索弓|将会
有个5个分片( primary shard ,又称主分片)构成的,每一个主分片会有一 个副本 ( replica shard,又称复制分片)

ElasticSearch基本api操作

上图是一个有3个节点的集群 ,可以看到主分片和对应的复制分片都不会在同-个节点内,这样有利于某个节点挂掉了,数据也不
至于丢失。实际上, 一个分片是一个Lucene索引 , 一个包含倒排索引的文件目录,倒排索引的结构使得elasticsearch在不扫描全部文档的情况下,就能告诉你哪些文档包含特定的关键字。

倒排索引

elasticsearch使用的是一种称为倒排索引的结构 |采用Lucene倒排索作为底层这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表。例如,现在有两个文档,每个文档包含如下内容:

Study every day, good good up to forever
To forever study every day,good good up

ElasticSearch基本api操作

搜索to forever 只需要查看包含每个词条的文档(很明显,doc_1中的内容权重更高)
ElasticSearch基本api操作

两个文档都匹配,但是第一一个文档比第二个匹配程度更高。如果没有别的条件,现在,这两个包含关键字的文档都将返回。
再来看一个示例,比如我们通过博客标签来搜索博客文章。那么倒排索弓列表就是这样的一个结构:
ElasticSearch基本api操作

如果要搜索含有python标签的文章,那相对于查找所有原始数据而言,查找倒排索引后的数据将会快的多。只需要查看标签这一栏,然后获取相关的文章ID即可。
elasticsearch的索引和Lucene的索引对比
在elasticsearch中,索引这个词被频繁使用,这就是术语的使用。在elasticsearch中 ,索引被分为多个分片,每份分片是一个Lucene的索引。所以一个elasticsearch索引是由多 个Lucene索引组成的。

IK分词器插件

下载

官网链接

https://github.com/medcl/elasticsearch-analysis-ik/releases

解压到es下plugins下
ElasticSearch基本api操作

2.新建ik文件夹把解压内容移到ik文件夹,然后重启es

ElasticSearch基本api操作

3.使用kibana测试(查看不同分词效果)

ik_smart

#会做最粗粒度的拆分 ik_smart
GET _analyze 
{
   "analyzer": "ik_smart",
   "text": "陈平安"
}

输出结果

{
  "tokens" : [
    {
      "token" : "陈",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "平安",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 1
    }
  ]
}

ik_max_word

#会将文本做最细粒度的拆分 ik_max_word
GET _analyze 
{
   "analyzer": "ik_max_word",
   "text": "陈平安"
}

输出结果

{
  "tokens" : [
    {
      "token" : "陈平",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "平安",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 1
    }
  ]
}

自己想要的词组被拆开了怎么办呢

配置自定义字典

进入ik文件夹下config下的IKAnalyzer.cfg.xml
ElasticSearch基本api操作

ElasticSearch基本api操作

在config目录下新建一个文本,修改后缀为dic

ElasticSearch基本api操作

ElasticSearch基本api操作

添加你所需要的词组,然后进入IKAnalyzer.cfg.xml把你刚新建的文件写入,再重启es

ElasticSearch基本api操作

es启动的时候会加载我们的dic文件
ElasticSearch基本api操作

再次查询

ElasticSearch基本api操作

Rest风格说明

基本Rest命令说明

ElasticSearch基本api操作

创建索引

PUT /text1/type1/1
{
  "name":"陈平安",
  "age":14
}

ElasticSearch基本api操作

使用ElasticSearch-head查看
ElasticSearch基本api操作

3、那么name这个字段用不用指定类型呢。毕竟我们关系型数据库是需要指定类型的

字符串类型
text、keyword
数值类型
long. integer, short, byte, double, float,. half float. scaled float
日期类型
date
布尔值类型
boolean
二进制类型
binary

指定具体规则

PUT /text2
{
  "mappings": {
    "properties": {
      "name":{
        "type": "text"
      },
      "age":{
        "type": "long"
      },
      "birthday":{
        "type": "date"
      }
    }
  }
}

ElasticSearch基本api操作

通过get请求获得具体信息

get /

ElasticSearch基本api操作

通过post修改具体信息

POST /text3/_doc/1/_update
{
  "doc":{
    "name":"陈平安和宁姚"
  }
}

ElasticSearch基本api操作

修改会覆盖当前

版本号增加

状态改变

ElasticSearch基本api操作

使用delete删除具体信息

DELETE /text1/type1/1

ElasticSearch基本api操作

通过post查询所有

POST chenpingan/user/_search

ElasticSearch基本api操作

查看默认信息

PUT /text3/_doc/1
{
  "name":"陈平安",
  "age":14,
  "birth":"2003-05-26"
}

ElasticSearch基本api操作

如果文档字段未指定类型,es系统会默认配置字段类型

ElasticSearch基本api操作

其他命令

GET _cat/indices?v查看所有文档

关于文档的基本操作

新增put

PUT /chenpingan/user/1
{
  "name":"陈平安",
  "age":14,
  "desc":"家住泥瓶巷",
  "tags":["打拳","练符","去倒悬山"]
}

PUT /chenpingan/user/2
{
  "name":"宁姚",
  "age":14,
  "desc":"家住剑气长城",
  "tags":["练剑","杀妖","飞升"]
}

查询get

GET chenpingan/user/1

ElasticSearch基本api操作

修改put和post

ElasticSearch基本api操作

PUT /chenpingan/user/1
{
  "name":"陈平安",
  "age":14,
  "desc":"住泥瓶巷",
  "tags":["打拳","练符","去倒悬山"]
}



POST chenpingan/user/1/_update
{
  "doc":{
    "desc":"去往剑气长城"
  }
}
put如果不传递值就会被覆盖,也就是置空

查询

简单搜索

根据默认的映射规则,产生基本的查询

GET chenpingan/user/1

条件模糊查询

GET chenpingan/user/_search?q=name:陈平安
      查询什么库              q查询      查询条件

ElasticSearch基本api操作

复杂操作select(排序,分页,高亮,模糊,精确查询)

查询匹配

这是官方的例子
GET /_search
{
  "query": {
    "match": {
      "message": "this is a test"
    }
  }
}

这样可以更能理解 匹配索引中name中包括"陈平安"的文档
GET /_search
{
  "query": {
    "match": {
      "name": "陈平安"
    }
  }
}

ElasticSearch基本api操作

查询的参数体使用json构造

GET chenpingan/user/_search
{
  "query": {
    "match": {
      "name": "陈平安"
    }
  }
}

通过_score属性来判断谁更加符合结果

ElasticSearch基本api操作

通过_sourc只显示匹配的name和desc值(结果过滤)

GET chenpingan/user/_search
{
  "query": {
    "match": {
      "name": "陈平安"
    }
  },
   "_source": ["name","desc"]
}

ElasticSearch基本api操作

排序

通过sort

#通过age年龄进行升序排序
GET chenpingan/user/_search
{
  "query": {
    "match": {
      "name": "陈平安"
    }
  },
  "sort": [
    {
    
      "age": {
        "order": "desc"
      }
    }
  ]
 
}

ElasticSearch基本api操作

分页

from 从第几条开始

size 返回多少条数据(单页面)

GET chenpingan/user/_search
{
  "query": {
    "match": {
      "name": "陈平安"
    }
  },
 
  "from": 0,
  "size": 2
 
}

通过age升序排序后分页
GET chenpingan/user/_search
{
  "query": {
    "match": {
      "name": "陈平安"
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ],
  
  "from": 0,
  "size": 2
 
}

ElasticSearch基本api操作

布尔值查询

"()"里面是等价于mysql中的操作

must(and) 所有条件都需要符合

多条件精确查询

GET chenpingan/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "陈平安"
          }
        },
      {
        "match": {
          "desc": "去往剑气长城"
        }
      }
      ]
    }
  }
}

ElasticSearch基本api操作

should(or)两个条件满足其一
GET chenpingan/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "陈平安"
          }
        },
      {
        "match": {
          "desc": "去往剑气长城"
        }
      }
      ]
    }
  }
}

ElasticSearch基本api操作

must_not(not) 禁止该数据

ElasticSearch基本api操作

filter过滤

gt 大于

gte 大于等于

lt 小于

lte 小于等于

查询name中有陈平安并且age大于等于3
GET chenpingan/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "陈平安"
          }
        }
    
      ]
      , "filter": {
        "range": {
          "age": {
            "gte": 3
          
          }
        }
      }
    }
  }
}

ElasticSearch基本api操作

查询name中有陈平安并且过滤age大于等于3小于15

使用多个条件进行过滤
ElasticSearch基本api操作

多条件查询

查询tags中含有"去","练符"的文档

GET chenpingan/user/_search
{
  "query": {
    "match": {
      "tags": "去 练符"
    }
  }
}	

ElasticSearch基本api操作

只要满足其中一个结果即可被查出,这个时候可以通过分值进行基本的判断

精确查询

term查询是直接通过倒排索引指定的词条进程精确的查找的!|

关于分词:
●term ,直接查询精确的
●match ,会使用分词器解析! (先分析文档,然后在通过分析的文档进行查询! )

两个类型 text keyword

_analyze默认分词器

analyzer 手动设置分词器

keyword 字段不会被分词器拆分来解析会作为一个整体

PUT testdb
{
  "mappings": {
    "properties": {
      "name":{
        "type": "text"
      },
      "desc":{
        "type": "keyword"
      }
    }
  }
}


PUT testdb/_doc/1
{
  "name":"陈平安 name",
  "desc":"陈平安 name"
}

PUT testdb/_doc/2
{
  "name":"陈平安 name",
  "desc":"陈平安 name2"
}


GET _analyze
{
  "analyzer": "keyword"
  , "text": "陈平安"
}


GET _analyze
{
  "analyzer": "standard"
  , "text": "陈平安"
}

ElasticSearch基本api操作

text 单字拆分

ElasticSearch基本api操作

使用term精确解析

keyword 字段不会被分词器拆分来解析会作为一个整体

GET testdb/_search
{
  "query": {
    "term": {
      "name": "陈"
    }
  }
}

GET testdb/_search
{
  "query": {
    "term": {
      "desc": "陈平安 name2"
    }
  }
}

通过name查询

ElasticSearch基本api操作

通过desc查询

ElasticSearch基本api操作

精确查询多个值

GET testdb/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
              "t1": "22"
          }
        },
         {
          "term": {
              "t1": "23"
          }
        }
      ]
    }
  }
}

ElasticSearch基本api操作

高亮查询

默认高亮
GET chenpingan/user/_search
{
  "query": {
    "match": {
      "name": "陈平安"
    }
  },
  "highlight": {
    "fields": {
      "name":{}
    }
  }
}

ElasticSearch基本api操作

自定义搜索高亮条件
GET chenpingan/user/_search
{
  "query": {
    "match": {
      "name": "陈平安"
    }
  },
  "highlight": {
    "pre_tags": "<p class='key  style='color:red'>", 
    "post_tags": "</p>", 
    "fields": {
      "name":{}
    }
  }
}

ElasticSearch基本api操作所学习ElasticSearch基本操作就这些,集成springboot的笔记下次更新
该文章基于"狂神说"学习文章来源地址https://www.toymoban.com/news/detail-450346.html

到了这里,关于ElasticSearch基本api操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java Api操作Elasticsearch

    本次使用 elasticsearch 版本为7.17.0, 建议使用 7.X 版本 ,8.1.2版本会遇到一些 Springboot(本人使用版本2.6.6) 版本不兼容的问题。此文章会列举一个例子。 我们在测试类中先创建一个客户端,用来向 ES 发送请求 测试代码如下: 控制台输出信息如下: 此处会遇到坑: 运行之后

    2023年04月09日
    浏览(40)
  • Java API批量操作Elasticsearch

    @Test public void batchAddIndex() throws IOException { BulkRequestBuilder bulkRequest = client .prepareBulk(); bulkRequest.add( client .prepareIndex( “batch_test1” , “batch” , “1” ) .setSource( jsonBuilder () .startObject() .field( “user” , “lzq” ) .field( “postDate” , new Date()) .field( “message” , “trying out Elasticsearch”

    2024年04月09日
    浏览(45)
  • Elasticsearch基本操作之文档操作

    本文来说下Elasticsearch基本操作之文档操作 文档概述 在创建好索引的基础上来创建文档,并添加数据。 这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式。 在 apifox 中,向 ES 服务器发 POST 请求 :http://localhost:9200/person/_doc,请求体内容为: 服务器响

    2024年02月01日
    浏览(39)
  • ElasticSearch基础篇-Java API操作

    演示代码 创建连接 POM依赖 建立连接 索引操作 创建索引 删除索引 查询索引 文档操作 创建文档 删除文档 更新文档 查询文档 批量操作 批量新增 批量删除 高级操作 聚合查询 组合查询 条件查询 过滤查询 模糊查询 高亮查询 全量查询 结果排序 分页查询 范围查询

    2024年02月10日
    浏览(39)
  • Elasticsearch 7.6 - API高阶操作篇

    只会CURD的boy可能对es的分片和副本概念都很模糊,更别提要怎么对一个索引设置一个合适的分片和副本大小了 分片 :你可以认为是一个存储数据库,有几个分片就有几个库,本质上是将数据分片存储,达到更好的性能和容灾效果 副本 :你可以认为是分片的从库,用来同步主

    2024年02月10日
    浏览(34)
  • (Rest风格API)Elasticsearch索引操作、映射配置、数据操作、查询操作

    1.请求方式:put 2.请求路径:索引库名 3.请求参数:json格式 number_of_shards 是指索引要做多少个分片,只能在创建索引时指定,后期无法修改。 number_of_replicas 是指每个分片有多少个副本,后期可以动态修改 什么是分片? ES中所存数据的文件块,也是数据的最小单元块。假如有

    2024年04月26日
    浏览(51)
  • javaAPI操作Elasticsearch_elasticsearch 修改字段 java api

    } } import com.zyw.elasticsearchdemo.constants.HotelConstants; import org.apache.http.HttpHost; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.Create

    2024年04月17日
    浏览(35)
  • ElasticSearch - 基本操作

    本文记录 ES 的一些基本操作,就是对官方文档的一些整理,按自己的习惯重新排版,凑合着看。官方的更详细,建议看官方的。 下文以 books 为索引名举例。 添加单个文档 (没有索引会自动创建) 不指定 id,会随机生成,如果需要指定 id,使用 POST books/_doc/id 还可以使用 put 的

    2024年03月20日
    浏览(42)
  • ElasticSearch8 - 基本操作

    本文记录 ES 的一些基本操作,就是对官方文档的一些整理,按自己的习惯重新排版,凑合着看。官方的更详细,建议看官方的。 下文以 books 为索引名举例。 添加单个文档 (没有索引会自动创建) 不指定 id,会随机生成,如果需要指定 id,使用 POST books/_doc/id 还可以使用 put 的

    2024年04月09日
    浏览(39)
  • 【ElasticSearch】ElasticSearch Java API的使用——常用索引、文档、查询操作(二)

    Elaticsearch ,简称为es,es是一个开源的 高扩展 的 分布式全文检索引擎 ,它可以近乎 实时的存储 、 检索数据; 本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的 目的

    2024年01月16日
    浏览(91)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包