一文带你了解Elasticearch及JavaApi使用【专题一】

3 篇文章 0 订阅

目录

一、目标

二、ElasticSearch介绍

1、简介

总结

突出优点

es、Lucene、solr对比

2、Elasticsearch基本概念:

倒排索引:倒排索引操作步骤:

三、RESTful应用方法

四、ElasticaSearch安装 

安装配置:

2、配置文件2.1 三个配置文件

2.2 elasticsearch.yml

2.3 jvm.options

2.4 log4j2.properties

2.5 系统配置

2.3 启动ES

 2.4 head插件安装

 五、ES快速入门

 5.1 创建索引库

5.2 创建映射 

 5.3 创建文档

5.4 搜索文档

 5.4.1查询结果分析

六、 IK分词器 

6.1测试分词器

6.2 安装IK分词器

 ​6.3 两种分词模式

6.4 自定义词库 

搜索ElasticsearchTemplate

搜索方法查询全部 matchAllQuery

布尔查询 boolQuery

精确匹配 termQuery

短语匹配 matchPhraseQuery

无评分查询 constantScoreQuery

普通查询 matchQuery

范围查询 range

索引Bboss

索引库

增删改查


​​​​​​​一、目标

  1. 了解Elasticsearch的应用场景
  2.  掌握索引维护的方法
  3.  掌握基本的搜索Api的使用方法

二、ElasticSearch介绍

1、简介

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。

Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。

Elasticsearch使用Lucene,并试图通过JSON和Java API提供其所有特性。它支持facetting和percolating,如果新文档与注册查询匹配,这对于通知非常有用。另一个特性称为“网关”,处理索引的长期持久性;例如,在服务器崩溃的情况下,可以从网关恢复索引。Elasticsearch支持实时GET请求,适合作为NoSQL数据存储,但缺少分布式事务。 [1]

官方网址:Elasticsearch:官方分布式搜索和分析引擎 | Elastic

Github:https://github.com/elastic/elasticsearch

总结

  • elasticsearch是一个基于Lucene的高扩展的分布式搜索服务器,支持开箱即用。
  • elasticsearch隐藏了Lucene的复杂性,对外提供Restful 接口来操作索引、搜索。

突出优点

  • .扩展性好,可部署上百台服务器集群,处理PB级数据。
  • 近实时的去索引数据、搜索数据。

es、Lucene、solr对比

  • 如果你公司现在用的solr可以满足需求就不要换了。
  • 如果你公司准备进行全文检索项目的开发,建议优先考虑elasticsearch,因为像Github这样大规模的搜索都在用 它。 
  • Luence是Apache基于Java编写的信息搜索工具包(jar包),它包含了索引结构、读写索引工具、相关性工具、排序等功能,因此Lucene的使用需要我们进一步开发搜索引擎系统, 如果数据获取、解析、分词等
  • Solr 是一个有HTTP接口的基于Lucene的查询服务器,是一个搜索引擎系统,系统封装了很多lucene细节,Solr可以直接利用HTTP GET/POST 请求去查询,维护修改索引。Solr利用zookeeper进行分布式管理,它的实现更加全面,官方提供的功能更多。
  • Elasticsearch 是一个建立在全文搜索引擎Apache Lucene基础上的搜索引擎,采用的策略师分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。es的实时搜索性比solr更好。

2、Elasticsearch基本概念:

        ES中有几个基本概念:索引(index)、类型(type)、文档(document)、映射(mapping)等。我们将这几个概念与传统的关系型数据库中的库、表、行、列等概念进行对比,如下表:

倒排索引:
倒排索引操作步骤:

  1. 将要搜索的文档内容分词,所有不重复的词组成分词列表。
  2. 将搜索的文档最终以Document方式存储起来。
  3. 每个词和docment都有关联。

这样在用户检索关键字时, 可以先查找关键字索引,在通过关键字与文档的对应关系查找到所在的文档。

现在,如果我们想搜索 quick brown ,我们只需要查找包含每个词条的文档:

​ 

 两个文档都匹配,但是第一个文档比第二个匹配度更高。如果我们使用仅计算匹配词条数量的简单 相似性算法 , 那么,我们可以说,对于我们查询的相关性来讲,第一个文档比第二个文档更佳。

索引(index):
        索引是ES的一个逻辑存储,对应关系型数据库中的库,ES可以把索引数据存放到服务器中,也可以sharding(分片)后存储到多台服务器上。每个索引有一个或多个分片,每个分片可以有多个副本。

类型(type):
        ES中,一个索引可以存储多个用于不同用途的对象,可以通过类型来区分索引中的不同对象,对应关系型数据库中表的概念。但是在ES6.0开始,类型的概念被废弃,ES7中将它完全删除。删除type的原因:

我们一直认为ES中的“index”类似于关系型数据库的“database”,而“type”相当于一个数据表。ES的开发者们认为这是一个糟糕的认识。例如:关系型数据库中两个数据表示是独立的,即使他们里面有相同名称的列也不影响使用,但ES中不是这样的。

我们都知道elasticsearch是基于Lucene开发的搜索引擎,而ES中不同type下名称相同的filed最终在Lucene中的处理方式是一样的。举个例子,两个不同type下的两个user_name,在ES同一个索引下其实被认为是同一个filed,你必须在两个不同的type中定义相同的filed映射。否则,不同type中的相同字段名称就会在处理中出现冲突的情况,导致Lucene处理效率下降。

去掉type能够使数据存储在独立的index中,这样即使有相同的字段名称也不会出现冲突,就像ElasticSearch出现的第一句话一样“你知道的,为了搜索····”,去掉type就是为了提高ES处理数据的效率。

除此之外,在同一个索引的不同type下存储字段数不一样的实体会导致存储中出现稀疏数据,影响Lucene压缩文档的能力,导致ES查询效率的降低

文档(document):
        存储在ES中的主要实体叫文档,可以理解为关系型数据库中表的一行数据记录。每个文档由多个字段(field)组成。区别于关系型数据库的是,ES是一个非结构化的数据库,每个文档可以有不同的字段,并且有一个唯一标识。

映射(mapping):
        mapping是对索引库中的索引字段及其数据类型进行定义,类似于关系型数据库中的表结构。ES默认动态创建索引和索引类型的mapping,这就像是关系型数据中的,无需定义表机构,更不用指定字段的数据类型。当然也可以手动指定mapping类型。

ES集群核心概念:
1、集群(cluster)
        一个ES集群由多个节点(node)组成, 每个集群都有一个共同的集群名称最为标识

2、节点(node)
        一个es实例即为一个节点,一台机器可以有多个节点,正常使用下每个实例都应该会部署在不同的机器上。ES的配置文件中可以通过node.master、 node.data 来设置节点类型

  • node.master: true/false 表示节点是否具有成为主节点的资格
  • node.data: true/false 表示节点是否为存储数据

node节点的组合方式:

  • 主节点+数据节点: 默认方式,节点既可以作为主节点,又存储数据
  • 数据节点:  节点只存储数据,不参与主节点选举
  • 客户端节点: 不会成为主节点,也不存储数据,主要针对海量请求时进行负载均衡

3、分片(shard):
        如果我们的索引数据量很大,超过硬件存放单个文件的限制,就会影响查询请求的速度,ES引入了分片技术。一个分片本身就是一个完成的搜索引擎,文档存储在分片中,而分片会被分配到集群中的各个节点中,随着集群的扩大和缩小,ES会自动的将分片在节点之间进行迁移,以保证集群能保持一种平衡。分片有以下特点:

  • ES的一个索引可以包含多个分片(shard);
  • 每一个分片(shard)都是一个最小的工作单元,承载部分数据;
  • 每个shard都是一个lucene实例,有完整的简历索引和处理请求的能力;
  • 增减节点时,shard会自动在nodes中负载均衡;
  • 一个文档只能完整的存放在一个shard上
  • 一个索引中含有shard的数量,默认值为5,在索引创建后这个值是不能被更改的。
  • 优点:水平分割和扩展我们存放的内容索引;分发和并行跨碎片操作提高性能/吞吐量;
  • 每一个shard关联的副本分片(replica shard)的数量,默认值为1,这个设置在任何时候都可以修改。

4、副本:replica
副本(replica shard)就是shard的冗余备份,它的主要作用:

  • 冗余备份,防止数据丢失;
  • shard异常时负责容错和负载均衡;

三、RESTful应用方法

  • 如何使用es?
  • Elasticsearch提供 RESTful Api接口进行索引、搜索,并且支持多种客户端。 

​ 

下图是es在项目中的应用方式: 

  1. 用户在前端搜索关键字
  2. 项目前端通过http方式请求项目服务端
  3. 项目服务端通过Http RESTful方式请求ES集群进行搜索
  4. ES集群从索引库检索数据。 

四、ElasticaSearch安装 

安装配置:


1、新版本要求至少jdk1.8以上。
2、支持tar、zip、rpm等多种安装方式。
在windows下开发建议使用ZIP安装方式。
3、支持docker方式安装
详细参见:https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html
下载ES: Elasticsearch 版本根据
https://www.elastic.co/downloads/past-releases;版本根据自己需要下载
解压 elasticsearch-6.2.1.zip


bin:脚本目录,包括:启动、停止等可执行脚本
config:配置文件目录
data:索引目录,存放索引文件的地方
logs:日志目录
modules:模块目录,包括了es的功能模块
plugins :插件目录,es支持插件机制


2、配置文件
2.1 三个配置文件

 ES的配置文件的地址根据安装形式的不同而不同:

  • 使用zip、tar安装,配置文件的地址在安装目录的config下。
  • 使用RPM安装,配置文件在/etc/elasticsearch下。
  • 使用MSI安装,配置文件的地址在安装目录的config下,并且会自动将config目录地址写入环境变量
  • ES_PATH_CONF。本教程使用的zip包安装,配置文件在ES安装目录的config下。

配置文件如下:

  • elasticsearch.yml : 用于配置Elasticsearch运行参数 jvm.options : 用于配置Elasticsearch JVM设置
  • log4j2.properties: 用于配置Elasticsearch日志


2.2 elasticsearch.yml

配置格式是YAML,可以采用如下两种方式:
方式1:层次方式
path: data: /var/lib/elasticsearch logs: /var/log/elasticsearch
方式2:属性方式
path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch

本项目采用方式2,例子如下:

cluster.name: toms
node.name: toms_node_1
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
node.master: true
node.data: true
#discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301", "0.0.0.0:9302"]
discovery.zen.minimum_master_nodes: 1
bootstrap.memory_lock: false
node.max_local_storage_nodes: 1
path.data: D:\ElasticSearch\elasticsearch‐6.2.1\data
path.logs: D:\ElasticSearch\elasticsearch‐6.2.1\logs
http.cors.enabled: true
http.cors.allow‐origin: /.*/
 


注意path.data和path.logs路径配置正确。


常用的配置项如下


cluster.name:配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。

node.name:节点名,通常一台物理服务器就是一个节点,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理一个或多个节点组成一个cluster集群,集群是一个逻辑的概念,节点是物理概念,后边章节会详细介绍。

path.conf: 设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在/etc/

elasticsearch path.data: 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开。

path.logs: 设置日志文件的存储路径,默认是es根目录下的logs文件夹 path.plugins: 设置插件的存放路径,默认是es根目录下的plugins文件夹

bootstrap.memory_lock: true 设置为true可以锁住ES使用的内存,避免内存与swap分区交换数据。

network.host: 设置绑定主机的ip地址,设置为0.0.0.0表示绑定任何ip,允许外网访问,生产环境建议设置为具体的ip。 

http.port: 9200 设置对外服务的http端口,默认为9200。

transport.tcp.port: 9300 集群结点之间通信端口

node.master: 指定该节点是否有资格被选举成为master结点,默认是true,如果原来的master宕机会重新选举新的master。

node.data: 指定该节点是否存储索引数据,默认为true。

discovery.zen.ping.unicast.hosts: ["host1:port", "host2:port", "..."] 设置集群中master节点的初始列表。

discovery.zen.ping.timeout: 3s 设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些。

discovery.zen.minimum_master_nodes:主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2。

node.max_local_storage_nodes:单机允许的最大存储结点数,通常单机启动一个结点建议设置为1,开发环境如果单机启动多个节点可设置大于1.

2.3 jvm.options


设置最小及最大的JVM堆内存大小:
在jvm.options中设置 -Xms和-Xmx:
1) 两个值设置为相等
2) 将 Xmx 设置为不超过物理内存的一半。


2.4 log4j2.properties


日志文件设置,ES使用log4j,注意日志级别的配置。


2.5 系统配置


在linux上根据系统资源情况,可将每个进程最多允许打开的文件数设置大些。
su limit -n 查询当前文件数

使用命令设置limit:
先切换到root,设置完成再切回elasticsearch用户。

sudo su
ulimit ‐n 65536
su elasticsearch

也可通过下边的方式修改文件进行持久设置
/etc/security/limits.conf
将下边的行加入此文件:

elasticsearch ‐ nofile 65536


2.3 启动ES


进入bin目录,在cmd下运行:elasticsearch.bat


浏览器输入:http://localhost:9200
显示结果如下(配置不同内容则不同)说明ES启动成功:
 

{
"name" : "toms_node_1",
"cluster_name" : "toms",
"cluster_uuid" : "J18wPybJREyx1kjOoH8T‐g",
"version" : {
"number" : "6.2.1",
"build_hash" : "7299dc3",
"build_date" : "2021‐12‐07T19:34:26.990113Z",
"build_snapshot" : false,
"lucene_version" : "7.2.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

 2.4 head插件安装

         head插件是ES的一个可视化管理插件,用来监视ES的状态,并通过head客户端和ES服务进行交互,比如创建映
射、创建索引等,head的项目地址在https://github.com/mobz/elasticsearch-head
从ES6.0开始,head插件支持使得node.js运行。

1、安装node.js

2、下载head并运行

git clone git://github.com/mobz/elasticsearch-head.git cd elasticsearch-head npm install npm run start open
HTTP://本地主机:9100 /
3、运行


打开浏览器调试工具发现报错:
Origin null is not allowed by Access-Control-Allow-Origin.
原因是:head插件作为客户端要连接ES服务(localhost:9200),此时存在跨域问题,elasticsearch默认不允许跨域访问。
解决方案:

  • 设置elasticsearch允许跨域访问。
  • 在config/elasticsearch.yml 后面增加以下参数:
  • #开启cors跨域访问支持,默认为false http.cors.enabled: true #跨域访问允许的域名地址,(允许所有域名)以上使
  • 用正则 http.cors.allow-origin: /.*/

注意:将config/elasticsearch.yml另存为utf-8编码格式。
成功连接ES

 

 五、ES快速入门

 5.1 创建索引库

1)使用postman或curl这样的工具创建:
put http://localhost:9200/索引库名称

{
    "settings": {
        "index": {
            "number_of_shards": 1,
            "number_of_replicas": 0
        }
    }
}

number_of_shards:设置分片的数量,在集群中通常设置多个分片,表示一个索引库将拆分成多片分别存储不同的结点,提高了ES的处理能力和高可用性,入门程序使用单机环境,这里设置为1。
number_of_replicas:设置副本的数量,设置副本是为了提高ES的高可靠性,单机环境设置为0.
 

 备注:也可以通过head插件新建

5.2 创建映射 

        我们要把课程信息存储到ES中,这里我们创建课程信息的映射,先来一个简单的映射,如下:
发送:post http://localhost:9200/索引库名称/类型名称/_mapping
创建类型为xc_course的映射,共包括三个字段:name、description、studymondel
由于ES6.0版本还没有将type彻底删除,所以暂时把type起一个没有特殊意义的名字。
post 请求:http://localhost:9200/xc_course/doc/_mapping
表示:在xc_course索引库下的doc类型下创建映射。doc是类型名,可以自定义,在ES6.0中要弱化类型的概念,给它起一个没有具体业务意义的名称。 

{
    "properties": {
        "name": {
            "type": "text"
        },
        "description": {
            "type": "text"
        },
        "studymodel": {
            "type": "keyword"
        }
    }
}

 

 5.3 创建文档

        ES中的文档相当于MySQL数据库表中的记录。

发送:put 或Post http://localhost:9200/xc_course/doc/id值 (如果不指定id值ES会自动生成ID) http://localhost:9200/xc_course/doc/4028e58161bcf7f40161bcf8b77c0000 

{ "name":"Bootstrap开发框架", "description":"Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包 含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的 精美界面效果。", "studymodel":"201001" }

 

5.4 搜索文档

1、根据课程id查询文档 发送:get http://localhost:9200/xc_course/doc/4028e58161bcf7f40161bcf8b77c0000 使用postman测试:

 2、查询所有记录

发送 get http://localhost:9200/xc_course/doc/_search

3、查询名称中包括spring 关键字的的记录 发送:get http://localhost:9200/xc_course/doc/_search?q=name:bootstrap

4、查询学习模式为201001的记录 发送 get http://localhost:9200/xc_course/doc/_search?q=studymodel:201001

 5.4.1查询结果分析

分析上边查询结果:

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 0.2876821,
        "hits": [{
            "_index": "xc_course",
            "_type": "doc",
            "_id": "4028e58161bcf7f40161bcf8b77c0000",
            "_score": 0.2876821,
            "_source": {
                "name": "Bootstrap开发框架",
                "description": "Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较
                为广泛。 此开发框架包含了大量的CSS、 JS程序代码, 可以帮助开发者( 尤其是不擅长页面开发的程序人员) 轻松的实现
                一个不受浏览器限制的精美界面效果。 ",
                "studymodel": "201001"
            }
        }]
    }

 took:本次操作花费的时间,单位为毫秒。

timed_out:请求是否超时 _shards:说明本次操作共搜索了哪些分片

hits:搜索命中的记录

hits.total : 符合条件的文档总数

hits.hits :匹配度较高的前N个文档

hits.max_score:文档匹配得分,这里为最高分

_score:每个文档都有一个匹配度得分,按照降序排列。

_source:显示了文档的原始内容。

六、 IK分词器 

6.1测试分词器

在添加文档时会进行分词,索引中存放的就是一个一个的词(term),当你去搜索时就是拿关键字去匹配词,最终 找到词关联的文档。

测试当前索引库使用的分词器: post 发送:localhost:9200/_analyze {"text":"测试分词器,后边是测试内容:spring cloud实战"}

会发现分词的效果将 “测试” 这个词拆分成两个单字“测”和“试”,这是因为当前索引库使用的分词器对中文就是单字 分词。

6.2 安装IK分词器

使用IK分词器可以实现对中文分词的效果。 下载IK分词器:(Github地址:https://github.com/medcl/elasticsearch-analysis-ik)

目前最新版本是IK v7.16.2,大家自行更具es来选对应的版本

下载zip:

测试分词效果:

        发送:post localhost:9200/_analyze {"text":"测试分词器,后边是测试内容:spring cloud实战","analyzer":"ik_max_word"

 6.3 两种分词模式

ik分词器有两种分词模式:ik_max_word和ik_smart模式。

  1. ik_max_word 会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、 华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。
  2. ik_smart 会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。 测试两种分词模式: 

6.4 自定义词库 

如果要让分词器支持一些专有词语,可以自定义词库。 iK分词器自带一个main.dic的文件,此文件为词库文件。在具体安装es的plugins/ik/config 下

 在上边的目录中新建一个my.dic文件(注意文件格式为utf-8(不要选择utf-8 BOM)) 可以在其中自定义词汇: 比如定义: 配置文件中配置my.dic,

 

搜索
ElasticsearchTemplate

  • 使用ElasticsearchTemplate,但是是自己定义的bean,ElasticsearchConfiguration。
  • maven依赖使用的jar,需要与部署的elasticsearch版本一致
  • 主要使用SearchRequestBuilder构建请求,提交
  • setFetchSource,是否获取信息内容,false不获取,查询数量时可以使用。true,获取全部字段。也可以指定获取哪些字段,或者过滤掉哪些字段
  • setSize 获取的数量,不建议超过500
  • highlighter,设置高亮字段
  • addSort,增加排序,可以增加多个,评分排序为SortBuilders.scoreSort(),没有其他排序时,默认相关度评分倒序
  • searchAfter,在某个查询评分条件后,查询结果,用于深分页查询
  • setSearchType,可以指定搜索方式,如DFS_QUERY_THEN_FETCH
  • setPreference,可以指定优先搜索主分片
  • 使用SearchResponse接收请求结果,获取结果可以使用searchResponse.getHits().getTotalHits()

搜索方法
查询全部 matchAllQuery

  • MatchAllQueryBuilder matchAllQuery(),通过QueryBuilders.matchAllQuery()创建
  • 不设置查询条件,查询全部时使用
  • 类似数据库查询时的1=1

布尔查询 boolQuery

  • BoolQueryBuilder创建,BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
  • 可以包装其他查询,作为一个整体
  • 可以看做,起到一个括号的作用,把几个请求包在一起

精确匹配 termQuery

  • termQuery,TermQueryBuilder termQuery(String name, Object value),使用QueryBuilders.termQuery创建,完全匹配
  • termsQuery,TermsQueryBuilder termsQuery(String name, Object... values),匹配多个值,value也可以是其他类型或者集合,但要类型一致,和查询key的类型匹配,通过QueryBuilders.termsQuery创建,完全匹配value不会被分词,直接匹配,完全命中,则会返回

短语匹配 matchPhraseQuery

  • matchPhraseQuery,MatchPhraseQueryBuilder matchPhraseQuery(String name, Object text),使用QueryBuilders.matchPhraseQuery创建,短语匹配
  • matchPhrasePrefixQuery,MatchPhrasePrefixQueryBuilder matchPhrasePrefixQuery(String name, Object text),使用QueryBuilders.matchPhrasePrefixQuery创建,前缀匹配
  • 类似于数据库的like查询,但也不一样,value会被分词

无评分查询 constantScoreQuery

  • 作为查询条件,但不参与评分
  • 例如根据关键词查询时,关键词的匹配相关度才是我们需要的,而站点id、栏目类型等,虽然作为查询条件,但并不需要它参与评分
  • ConstantScoreQueryBuilder constantScoreQuery(QueryBuilder queryBuilder),可以把其他不需要参与评分的请求条件,包在里面

普通查询 matchQuery

  • 单字段查询,matchQuery,``
  • 多字段查询 multiMatchQuery,一个查询条件value,需要匹配多个字段时使用。 MultiMatchQueryBuilder multiMatchQuery(Object text, String... fieldNames),fieldNames为字段列表,text会被分词
  • 可以指定type,BEST_FIELDS模糊查询,PHRASE短语匹配,PHRASE_PREFIX前缀匹配
  • 是否有值 existsQuery        ExistsQueryBuilder existsQuery(String name),通过QueryBuilders.existsQuery创建类似于数据库的 is not null

范围查询 range

  • new        RangeQueryBuilder(field).from(from).includeLower(includeLower).to(to).includeUpper(includeUpper),可用于范围查询,例如日期、数值等
  • 可包含边界值,也可以不包含

索引Bboss

  • 暂时只使用了bboss的http封装,借助它使用9200端口提交
  • 其实自己找一个http工具类也可以,只不过bboss封装了很多方法

索引库

  • index是否存在 existIndice
  • type是否存在 existIndiceType
  • 获取别名 _aliases
  • 删除别名 removeAlias
  • 添加别名 addAlias
  • 创建索引库 createIndiceMapping
  • 新建/修改type的mapping updateIndiceMapping
  • 删除索引库 dropIndice

增删改查

  • 新增/更新单个文档 addDocumentWithId addDocument
  • 删除文档 deleteDocument
  • 获取单个文档 getDocument
  • 根据查询删除 _delete_by_query


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LVS(Linux Virtual Server)是一种基于 Linux 系统的负载均衡集群技术,它主要用于将网络流量分发到多个服务器上,以提高系统的可靠性、可扩展性和性能。 LVS 集群一般包括四个组件:调度器(LVS 调度器)、前端服务器(负载均衡器)、后端服务器(真实服务器)和存储服务器(用于共享数据)。首先,调度器接收来自客户端的请求,然后根据配置的调度算法(如轮询、加权轮询、最小连接数等)将请求分发到多个前端服务器。前端服务器接收到请求后,通过相应的负载均衡算法将请求转发到后端的真实服务器上进行处理。在整个过程中,存储服务器用于存放共享的数据,以确保所有的真实服务器都能获取到相同的数据,并提供一致的服务。 LVS 集群的优点是能够提高网站的稳定性和可靠性,当某一台服务器出现故障时,调度器会自动将请求分发到其他可用的服务器上,从而保证服务的连续性。同时,LVS 集群还能够通过增加前端服务器和后端服务器的数量来提高系统的性能和吞吐量,以满足不断增长的用户需求。 在实际应用中,LVS 集群需要合理配置,包括选择合适的调度算法、调整每台服务器的权重、选择适当的硬件设备等。此外,还需要及时监控集群的运行状态,及时发现和解决故障,以确保整个系统的正常运行。 总的来说,LVS 负载均衡集群是一种强大而高效的集群技术,能够帮助企业提高系统的可靠性和性能,是现代互联网应用中不可或缺的重要组成部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值