spring-boot-starter-data-elasticsearch1、概述SpringDataElasticsearch是SpringData项目下的一个子模块。查看SpringData的官网:http://projects.spring.io/spring-data/SpringData的使命是给各种数据访问提供统一的编程接口,不管是关系型数据库(如MySQL),还是非关系数据库(如Redis),或者类似Elasticsearch这样的索引数据库。从而简化开发人员的代码,提高开发效率。SpringBoot与Elasticsearch的对应版本:引入依赖:<parent>
9、IndexAPIs9.1、AnalyzeAPI@Testpublicvoidanalyze()throwsIOException{//最简单的形式AnalyzeRequestrequest1=AnalyzeRequest.withGlobalAnalyzer("english","Sometexttoanalyze","Somemoretexttoanalyze");//自定义配置//自定义tokenfilterMap<String,Object>stopFilter=newHashMap<>();stop
7、SearchAPIs7.1、SearchSourceBuilder控制搜索行为的大多数选项都可以在SearchSourceBuilder上设置,它或多或少包含与RestAPI的搜索请求体中的选项相当的选项。SearchSourceBuildersourceBuilder=newSearchSourceBuilder();//查询语句sourceBuilder.query(QueryBuilders.termQuery("user","kimchy"));//fromsourceBuilder.from(0);//sizesourceBuilder.s
HighLevelRESTClientElasticsearchClient官方高级客户端。基于低级客户端,主要目标是为了暴露各API特定的方法。JavaHighLevelRESTClient依赖于Elasticsearch核心项目,将Request对象作为参数,返回一个Response对象。所有API都可以同步或异步调用。同步调用方法立即返回一个Response对象。而异步调用方法(方法名以async结尾)依赖于监听,当有请求返回或是错误返回时,该监听会通知到对应的方法继续执行。注意:这种方式,所使用的依赖库的版本要和Es对应。引入依赖:同时排除掉版本不一致的依赖<dependency
LowLevelRESTClientElasticsearchClient低级别客户端。它允许通过HTTP请求与Elasticsearch集群进行通信。API本身不负责数据的编码解码,由用户去编码解码。它与所有的Elasticsearch版本兼容。这种方式好处就是兼容所有的Es版本。但是就是数据处理比较麻烦。引入依赖:<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><v
Java访问RestAPIElasticsearch提供RestAPI,所以可以直接直接使用HTTP请求,去操作Es。HTTP请求工具,可以使用Java自带的HttpUrlConnection,也可以使用一些HTTP请求库,例如HttpClient、OKHttp、Spring中的RestTemplate都可以。这种方式有一个弊端,就是要自己组装请求参数,自己去解析响应的JSON。1、原生Java访问RestAPI在Java中,可以使用java.net包下的URLConnection类来发送HTTP请求。//java原生,手动认证后调用_count接口@Testpublicvoidjava_au
1、配置elasticsearch.ymlhttp.cors.enabled:truehttp.cors.allow-origin:"*"http.cors.allow-headers:Authorizationxpack.security.enabled:truexpack.security.transport.ssl.enabled:true然后重启服务2、设置elasticsearch密码接下来,我们需要启用X-PackSecurity。这样才能对Elasticsearch进行更加全面的安全加固。具体操作如下:bin/elasticsearch-setup-passw
Elasticsearch配置1、配置文件的位置Elasticsearch有三个配置文件:elasticsearch.yml:Elasticsearch配置文件jvm.options:ElasticsearchJVM配置文件log4j2.properties:Elasticsearch日志配置文件这些配置文件位于配置目录,这个目录的默认位置取决于安装来源是归档的发行版(tar.gz或zip)还是安装包的发行版(DebianorRPMpackages)。对于归档的发行版,配置目录默认位于$ES_HOME/config。配置目录可以通过环境变量ES_PATH_CONF来修改,比如:ES_PATH_
ElasticsearchJavaAPIJava操作Es的方案有如下几种,根据Elasticsearch版本的不同要选择对应的客户端。1、直接使用HTTP请求Elasticsearch提供RestAPI,所以可以直接直接使用HTTP请求,去操作Es。HTTP请求工具,可以使用Java自带的HttpUrlConnection,也可以使用一些HTTP请求库,例如HttpClient、OKHttp、Spring中的RestTemplate都可以。这种方式有一个弊端,就是要自己组装请求参数,自己去解析响应的JSON。2、LowLevelRESTClientElasticsearchClient低级别客
Analyzer&AnalyzeAPI1、Analyzer的组成分词器的作用是当一个文档被索引的时候,分词器从文档中提取出若干词元来支持索引的存储和搜索。分析器(analyzer)都由三种构件组成的:characterfilters,tokenizers,tokenfilters。Characterfilters(字符过滤器)字符过滤器接收原始文本作为字符流,并可以通过添加、删除和更改字符来转换流。例如,可以使用字符过滤器将印度-阿拉伯数字(0123456789)转换成阿拉伯-拉丁语中的(0123456789),或从流中剥离<b>等HTML元素。分析器可能有零个或多个字符过
ClusterAPI详解ClusterAPI主要是用来查看或更改集群相关的信息或设置。其中,一些集群级API可以在节点的子集上操作,这些节点可以通过节点过滤器指定。例如,任务管理、节点统计信息和节点信息API可以从一组经过过滤的节点而不是从所有节点报告结果。1、节点过滤节点过滤器是用逗号分隔的单个过滤器列表形式,每个过滤器都会添加或删除所选子集中的节点。过滤器描述_all将所有节点添加到子集中_local将本地节点添加到子集中节点的ID或名称把指定ID或名称的节点添加到子集中IP或主机名把指定IP或主机名称的节点添加到子集中*节点名称、ID、IP、主机名称可以包括通配符master:true把
IndexSettings索引级别的设置可以针对每个索引单独设置。这些设置可以是:static(静态的):只能在索引创建时或者在状态为closedindex(闭合的索引)上设置。dynamic(动态的):可以使用update-index-settingsAPI在状态为liveindex(激活的索引)上更改它们。1、Staticindexsettings(静态索引设置)index.number_of_shards:索引应该具有的主碎片数。默认值为1。此设置只能在创建索引时设置。不能在闭合索引上更改它。注意:每个索引的碎片数量限制为1024个。此限制是一个安全限制,用于防止由于资源分配而意外创建可
IndexAPI索引API是用于管理单个索引、索引设置、别名、映射和索引模板等功能的接口。1、创建索引创建索引API用于在Elasticsearch中手动创建索引。Elasticsearch中的所有文档都存储在某一个索引中。//语法PUT/<index>最基本的形式如下:PUTtwitter它创建了名为twitter的索引,搜索设置都采用默认值。索引名称有一些限制,原则是尽可能采用全小写的英文。限制如下:仅小写字母不能包括\、/、*、?、"、<、>、|、``(空格字符)、,、#等7.0版之前的索引可能包含冒号(:),但已弃用,7.0版中不支持它不能以-、_、+
索引统计1、docs-文档数量可以不指定索引、也可以指定具体索引、也可以指定模糊索引://获取所有索引的docs数量GET/_stats/docs//获取指定索引的docs数量GET/bank/_stats/docs//获取同类索引的docs数量GET/log-*/_stats/docs返回结果:{"_shards":{"total":2,"successful":1,"failed":0},"_all":{"primaries":{"docs":{&qu
1、乐观并发控制Elasticsearch是分布式的,创建、更新或删除文档时,必须将文档的新版本复制到集群中的其他节点。Elasticsearch也是异步和并发的,这意味着这些复制请求是并行发送的,并且可能不按顺序到达目的地。Elasticsearch需要一种方法来确保旧版本的文档永远不会覆盖新版本的文档。为了确保旧版本的文档不会覆盖新版本文档,对文档执行的每个操作都由主分片分配一个序列号,序列号随着每个操作的增加而增加,因此新操作的序列号肯定比旧操作的序列号更高。然后,Elasticsearch可以使用这个序列号来确保新的文档版本不会被分配了较小序列号的更改覆盖。例如,以下索引命令将创建一个
SearchAPI搜索API(_search)允许用来执行搜索查询并返回匹配的结果。可以使用简单查询字符串作为参数提供查询(URI形式),也可以使用请求正文(body形式)。大多数搜索API都是支持多索引的,ExplainAPI除外(用于调试性能)。//语法GET/<index>/_searchGET/_searchPOST/<index>/_searchPOST/_search所有搜索API都支持跨索引机制,并支持多索引语法。例如,搜索twitter索引中的所有文档:GET/twitter/_search?q=user:kimchy还可以在多个索引中搜索具有特定标记的
RestAPI通用参数1、多索引大多数API都支持跨多个索引执行,可以使用简单的test1,test2,test3表示法(或对所有索引执行,用_all)。它还支持通配符,例如test*或*test或te*t或*test*,以及“排除”(-)功能,例如-test3。所有多索引API都支持以下URL查询字符串参数:ignore_unavailable:控制是否忽略不可用索引,包括不存在的索引或已关闭的索引。可以设置为true或false。allow_no_indices:当通配符索引表达式结果为空时,allow_no_indices控制请求是否失败。可以指定true或false。例如,指定了通配符
Term向量词项向量(termvector)是有elasticsearch在indexdocument的时候产生,其包含对document解析过程中产生的分词的一些信息,例如分词在字段值中的位置、开始和结束的字符位置、分词的元数据payloads等;termvector是单独进行存储的,会额外多占用一杯的空间,所以elasticsearch默认情况下禁用词项向量,如果要启用,我们需要在字段的mapping中使用term_vector进行设置;1、term_vector的配置选项配置选项描述no不启用termvector,默认值yes启用termvector,但是仅记录分词with_positi
操作文档单文档:IndexAPIGetAPIDeleteAPIUpdateAPI多文档:MultiGetAPIBulkAPIDeleteByQueryAPIUpdateByQueryAPIReindexAPI所有CRUDAPI都是单索引API。index参数接受一个索引名,或一个指向单个索引的别名(alias)。单文档API1、IndexAPI索引API在特定索引中添加或更新JSON文档,使其可搜索。//4种语法PUT/<index>/_doc/<_id>POST/<index>/_doc/PUT/<index>/_create/<_id&
查看APIJSON格式非常适合计算机,虽然打印得很好,但用户试图在数据中查找到关系时也会感到乏味。人类的眼睛,尤其是在看终端时,需要的是紧凑和对齐的文本。/_cat旨在满足这一需求。1、查看子目录_cat/后不跟任何子节点,返回的结果是目录,也就是可用的URL节点,这个功能是非常有用的,当忘记某个接口时可以先执行这个接口。示例如下:get/_cat返回结果就是所有可用的CatAPI:/_cat/allocation/_cat/shards/_cat/shards/{index}/_cat/master/_cat/nodes/_cat/tasks/_cat/indices/_cat/indice
聚合聚合框架用于根据搜索查询提供聚合数据。聚合可以看作在一组文档上构建分析信息的工作单元。执行上下文定义此文档集是什么,例如,顶级聚合在搜索请求的已执行查询或筛选器的上下文中执行。聚合有许多不同的类型,每种类型都有自己的目的和输出。为了更好地理解这些类型,通常将它们分为四大类:存储桶聚合:构建存储桶(bucket)的聚合系列,其中每个存储桶都与键和文档相关联。当执行聚合时,将对上下文中的每个文档评估所有bucket条件。当条件匹配时,文档将被视为“属于”相关bucket。在聚合过程结束时,我们将得到一个存储桶列表——每个存储桶都有一组属于它的文档。度量值聚合:在一组文档上跟踪和计算度量值(me
搜索1、搜索入门搜索分为两个过程:当向索引中保存文档时,默认情况下,es会保存两份内容,一份是_source中的数据,另一份则是通过分词、排序等一系列过程生成的倒排索引文件,倒排索引中保存了词项和文档之间的对应关系。搜索时,当es接收到用户的搜索请求之后,就会去倒排索引中查询,通过的倒排索引中维护的倒排记录表找到关键词对应的文档集合,然后对文档进行评分、排序、高亮等处理,处理完成后返回文档。2、简单搜索2.1、match_all——查询所有GET/bank/_search{"query":{"match_all":{}}}简写:GET/bank/_sea
1、映射1.1、动态映射底层会自动的根据存入的数据判断数据类型,这种自动分析就叫动态映射。创建一个索引:PUTbook/_doc/1{"name":"三国演义","author":"罗贯中","price":20,"publishDate":"2020-01-01"}查看动态映射:GET/book/_mapping返回:{"book":{"mappings":{"properties":{&quo
IK中文分词器IK是基于字典的一款轻量级的中文分词工具包,可以通过elasticsearch的插件机制集成1、下载下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases2、集成在elasticsearch的安装目录下的plugin下,新建ik目录:cdelasticsearch-7.16.0/plugingsmkdirik解压ik压缩包,将所有文件都放入ik目录中:重启elasticsearch:3、测试IK提供了ik_smart和ik_max_word两个分析器;ik_max_word分析器会最大程度的对文本进行分词,
元字段每个文档都有与之关联的元数据,元字段是为了保证系统正常运转的内置字段,比如_index表示索引字段,_type表示映射类型字段和_id表示文档主键字段,这些字段都是以下划线开头的。当映射类型被创建的时候,可以自定义一些元字段的行为,例如标识元字段、文档来源元字段、索引元字段、路由元字段等。标识元字段:参数说明_index文档所属的索引_uid包含_type和_id的混合字段_type文档的映射类型_id文档的ID文档元字段:参数说明_source作为文档内容的原始JSON_size_source元字段占用的字节数,通过mapper-size插件提供索引元字段:参数说明_all索引所有字段
1、索引监控在Elasticsearch中,系统提供了接口来监控索引的状态,包括索引的统计信息、碎片信息、恢复的状态和分片的信息,利用这些接口可以随时监控系统索引的状态。1.1、索引统计索引统计接口提供索引中不同内容的统计数据(其中的大多数统计数据也可以从节点级别范围取得)。获取所有聚合一级索引的统计数据:GEThttp://127.0.0.1:9200/_stats获取指定索引的统计数据:GEThttp:127.0.0.1:9200/index1,index2/_stats默认情况返回所有统计数据,也可以在URL中指定需要返回的特定统计数据。指定数据如下表:一些统计数据可以作用在字段粒度上,
索引配置、模板和重建在Elasticsearch中索引有很多的配置参数,有些配置是可以在建好索引后重新进行设置和管理的,比如索引的副本数量、索引的分词等。1、获取索引配置索引中包含很多配置参数,可以通过下面命令获取索引的参数配置:GEThttp://127.0.0.1:9200/secisland/_settings获取索引配置参数的请求格式如下:host:port/(index)/_settings{index}为索引名称,可以接收多种参数格式,*|all|namel,name2…过滤配置参数的返回结果:GEThttp://127.0.0.1:9200/secisland/_settings
Lucene倒排索引倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各个记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而成为倒排索引(invertedindex)。带有倒排索引的文件我们成为倒排索引文件,简称倒排文件(invertedfile)。倒排索引中的索引对象是文档或者文档集合中的单词等,用来存储这些单词在一个文档或者一组文档中的存储位置,是对文档或者文档集合的一种最常用的索引机制。搜索引擎的关键步骤就是建立倒排索引,倒排索引一般表示为一个关键词,然后是它的频度(出现的次数)、位置(出现在哪一篇文章或网页中,
配置Elasticsearch配置文件在elasticsearch/config文件夹下。在这个文件夹中有两个文件,一个是Elasticsearch配置不同模块的配置文件elasticsearch.yml,另一个是Elasticsearch日志的配置文件logging.yml。默认配置文件为YML。Elasticsearch提供了多种方式进行设置,在系统内部,都使用命名空间来表示这些设置,根据这些命名空间,系统可以很容易地扩展到其他格式。比如设置节点名称如下:yml格式:node.name:node-1JSON格式:只需要把elasticsearch.yml名修改成elasticsearch.
引入依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0https://maven.apache.org/xsd/maven-4.0.0.xsd"&