ES(笔记)

es就是json请求体代替字符串查询

dsl查询和过滤,一个模糊查询,一个非模糊查询

must,should 做模糊查询的,里面都是match,根据查询内容进行匹配,filter过滤,term词元查询,就是等值查询。range   

  • query : 查询,所有的查询条件在query里面

  • bool : 组合搜索bool可以组合多个查询条件为一个查询对象,这里包含了 DSL查询和DSL过滤的条件

  • must : 必须匹配 :与(must) 或(should) 非(must_not)

  • match:分词匹配查询,会对查询条件分词 , multi_match :多字段匹配

  • filter: 过滤条件

  • term:词元查询,不会对查询条件分词

  • from,size :分页

  • _source :查询结果中需要哪些列

  • sort:排序

分词器:

什么叫分词,在全文检索的理论中,通过关键字查询文档索引进行匹配

倒排索引,正派索引

正排索引,就是一个一个匹配,然后赛选数据。

倒排索引:根据分词器进行分词,语义转换,排序,分组操作生成词元,词元对应文档id

操作es,首先要获取客户端,所以我们要工具类,拿到客户端。

es为什么查询快,因为基于倒排索引,然后就问你倒排索引,非常热点的面试题。

分词器作用

数据的查询是否精准和分词器有很大关系,它默认是英文的分词器

中文的分词器

IK分词器

ES对中文做分词器,默认是英文分词器,10年了还是IK分词器。

要写上,anlyzer:“ik smart”

ik 分词器中有个config文件夹,加上自己想要分词的词语即可。

解压后放到Es插件中

mappering 映射 都是自动给我们创建的,有默认mappering

给的什么数据,就自动解析,默认映射类型。

详细映射写法

analyzer   索引分词器,索引创建时使用的分词器

search_analyzer:  搜索改字段的值,传入的查询内容的分词器。

多字段索引:当对该字段需要使用多种索引模式时使用。如:城市搜索 New York"city":"city":{ "type": "text", "analyzer": "ik_smart", "fields": { "raw": { "type": "keyword" } } } 解释:相当于给 city取了一个别名 city.raw,city的类型为text , city.raw的类型keyword 搜索 city分词 ; 搜索city.raw 不分词那么以后搜索过滤和排序就可以使用city.raw字段名 |

相当于又是text又是keyword?

排序不分词,相当于多了个别名。

默认文档映射

public class ESClientUtil {public static TransportClient getClient(){TransportClient client = null;Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build();try {client = new PreBuiltTransportClient(settings).addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));} catch (UnknownHostException e) {e.printStackTrace();}return client;}}

API结合Es

简单的增删改查,就不讲了吧,大概流程都是差不多,都是获取的客户端.方法,增删改查的。

先批量插入100条数据,做测试用的

    @Testpublic void test4(){
//        批量新增100次TransportClient client = esClientUtil.getClient();BulkRequestBuilder bulkRequestBuilder = client.prepareBulk("shopcar99", "user");for (int i = 0; i < 100; i++) {IndexRequestBuilder indexRequestBuilder = client.prepareIndex("shopcar99", "user", i + "");HashMap<String, Object> map = new HashMap<>();map.put("id",i);map.put("name","zhang"+i);map.put("sex",i%2==0?"n":"nv");map.put("age",26+i);map.put("intro",i+"qweqeq");indexRequestBuilder.setSource(map);bulkRequestBuilder.add(indexRequestBuilder);}BulkResponse bulkItemResponses = bulkRequestBuilder.get();System.out.println(bulkItemResponses);}

DSL查询+DSL过滤

主要的层级关系

query -> bool -> must -> match

先去那query,再去拿bool,分词是must-》match

filter->range

把层级理清楚了,代码就懂了。

    @Testpublic void test5(){TransportClient client = esClientUtil.getClient();SearchRequestBuilder requestBuilder = client.prepareSearch("shopcar99");SearchRequestBuilder user = requestBuilder.setTypes("user");
//        3分页查询,排序,指定查询字段,查询条件
//        分页requestBuilder.setFrom(0);requestBuilder.setSize(10);
//        paixurequestBuilder.addSort("age",SortOrder.ASC);
//        第一个字段叫做包含的 会查出第一个参数中设置的字段
//        第二个参数 exclude 排除  就是排除掉第二个参数中的字段,其他字段全部都要查出来。String [] include = {"id","name","age","sex","intro"};requestBuilder.setFetchSource(include,null);
//        为什么要用bool,
//        query -> bool -> must -> match
//        bool,直接拿到bool那个层级
//        分词区间等级查询,must->matchBoolQueryBuilder boolQuery = QueryBuilders.boolQuery();List<QueryBuilder> must = boolQuery.must();
//        模糊查询
//        must.add(QueryBuilders.matchQuery("intro","1"));MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("intro", "qweqeq");must.add(matchQueryBuilder);
//        bool->filter->rangeList<QueryBuilder> filter = boolQuery.filter();QueryBuilders.rangeQuery("age").gte(30).lte(70);//等值查询TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("sex", "n");filter.add(termQueryBuilder);requestBuilder.setQuery(boolQuery);SearchResponse searchResponse = requestBuilder.get();SearchHits hits = searchResponse.getHits();System.out.println(hits.getTotalHits());SearchHit[] hits1 = hits.getHits();
//        hits里面还有hits,这里面就是数据for (SearchHit documentFields : hits1) {System.out.println(documentFields.getSourceAsMap());}client.close();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/365613.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈人工智能发展趋势

第三次浪潮 人类科技发展的主线正沿着“能源”和“新型”展开。AI的尽头是光伏和储能。 如今我们正在经历第三次浪潮——信息文明。 社会生产力 劳动对象 劳动工具 劳动者 生产要素 农业文明铜器铁器 材料 人力工具 农民 土地人力 工业文明机车电力 材料动力 动力…

如何使用命令提示符查询电脑相关序列号等信息的操作方法

如何使用命令提示符查询硬盘的序列号&#xff1f; 如果出于保修或其他目的&#xff0c;你想知道硬盘驱动器的序列号&#xff0c;你不想使用第三方应用程序&#xff0c;或者如果你更喜欢命令行方法&#xff0c;则可以使用带有命令提示符的命令来显示硬盘驱动器的序列号。 1. 按…

# 音频处理4_傅里叶变换

1.离散傅里叶变换 对于离散时域信号 x[n]使用离散傅里叶变换&#xff08;Discrete Fourier Transform, DFT&#xff09;进行频域分析。 DFT 将离散信号 x[n] 变换为其频谱表示 X[k]&#xff0c;定义如下&#xff1a; X [ k ] ∑ n 0 N − 1 x [ n ] e − j 2 π k n N X[k]…

【QT】输入类控件

目录 Line Edit 核心属性 核心信号 正则表达式 示例&#xff1a;使用正则表达式验证输入框内容 示例&#xff1a;切换输入框密码模式下的显示状态 Text Edit 核心属性 核心信号 示例&#xff1a;获取多行输入框的内容同步显示到label 示例&#xff1a;获取文本的选…

Windows 安装docker详细步骤说明

文章目录 1. 检查系统要求2. 启用硬件虚拟化3. 启用Hyper-V和容器功能4. 下载并安装Docker Desktop5. 配置Docker Desktop6. 安装WSL 27. 验证Docker安装8. 常见问题排查9. 重点说明参考资源 在Windows上安装Docker的详细步骤如下&#xff1a; 1. 检查系统要求 确保您的Window…

WPF----自定义滚动条ScrollViewer

滚动条是项目当中经常用到的一个控件&#xff0c;大部分对外项目都有外观的需求&#xff0c;因此需要自定义&#xff0c;文中主要是针对一段动态的状态数据进行展示&#xff0c;并保证数据始终在最新一条&#xff0c;就是需要滚动条滚动到底部。 1&#xff0c;xaml中引入 <…

提升写作效率:探索AI在现代办公自动化中的应用

工欲善其事&#xff0c;必先利其器。 随着AI技术与各个行业或细分场景的深度融合&#xff0c;日常工作可使用的AI工具呈现出井喷式发展的趋势&#xff0c;AI工具的类别也从最初的AI文本生成、AI绘画工具&#xff0c;逐渐扩展到AI思维导图工具、AI流程图工具、AI生成PPT工具、AI…

【爱上C++】详解string类2:模拟实现、深浅拷贝

在上一篇文章中我们介绍了string类的基本使用&#xff0c;本篇文章我们将讲解string类一些常用的模拟实现&#xff0c;其中有很多细小的知识点值得我们深入学习。Let’s go&#xff01; 文章目录 类声明默认成员函数构造函数析构函数拷贝构造函数深浅拷贝问题传统写法现代写法…

外接电容选择不当会对晶振电路造成什么影响?

在电子设备中&#xff0c;晶振电路负责提供稳定的时钟信号&#xff0c;这对于电路的同步和正确操作至关重要。外接电容在晶振电路中发挥着关键作用&#xff0c;其选择是否得当直接影响到晶振的性能。以下是不当选择外接电容可能带来的问题&#xff1a; 频率稳定性下降&#xf…

商场配电新思维:智能网关驱动的自动化管理系统

在商场配电室监控系统中&#xff0c;主要是以无线网络为载体&#xff0c;目的就是便于对变电站等实时监测与控制。其中&#xff0c;4G配电网关非常关键&#xff0c;可以将配电室系统终端上的信息数据及时上传到服务器&#xff0c;再由服务器下达控制指令到各模块中&#xff0c;…

电脑技巧:告别卡顿,迎接流畅——Wintune系统优化软件功能详解

目录 一、Wintune介绍 二、Wintune核心功能介绍 2.1 系统优化 2.2 隐私功能 2.3 文件管理模块 2.4 可选选项 2.5 UWP app服务 2.6 startup Manager 2.7、主机编辑 三、总结 电脑是大家目前日常办公娱乐必不可小的工具&#xff0c;软件市场上的系统优化软件层出不穷&a…

泛型的使用(<T>)

文章目录 前言一、泛型是什么&#xff1f;二、泛型的使用 1.定义泛型类2.泛型的常规用法总结 前言 强制类型转换存在一定隐患&#xff0c;如数据丢失、内存溢出、运行时错误、程序逻辑错误等。所以提供了泛型机制&#xff0c;使程序员可以定义安全的数据类型进行操作。通俗的理…

宠物医院管理系统-计算机毕业设计源码07221

目 录 1 绪论 1.1 选题背景和意义 1.2国内外研究现状 1.3论文结构与章节安排 2 宠物医院管理系统系统分析 2.1 可行性分析 2.1.1技术可行性分析 2.1.2 操作可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分…

Soul社交元宇宙智能连接安全相伴,打造值得用户信赖的社交环境

随着人工智能技术的快速发展,社交平台正在迎来一场革命性的变革。从智能推荐到情感分析,社交平台通过深度学习和数据分析为用户提供更加个性化、智能化的社交体验。与此同时,数字时代人们的安全意识正逐渐增强。为此,一个智能、安全的社交平台成为人们迫切需要。而新型社交平台…

五种肉苁蓉属植物叶绿体基因组-文献精读25

Structural mutations of small single copy (SSC) region in the plastid genomes of five Cistanche species and inter-species identification 五种肉苁蓉属植物叶绿体基因组中小单拷贝 (SSC) 区域的结构突变及物种间鉴定 摘要 背景 肉苁蓉属是列当科的重要属类&#xf…

[SwiftUI 开发] 嵌套的ObservedObject中的更改不会更新UI

1. 发生问题的demo 业务逻辑代码 class Address: ObservableObject {Published var street "123 Apple Street"Published var city "Cupertino" }class User: ObservableObject {Published var name "Tim Cook"Published var address Addr…

嵌入式linux系统中动态链接库实现详解

大家好,linux系统中动态库是如何实现相互链接的?今天简单聊聊动态链接库的实现原理。 假设有这样两段代码,第一段代码定义了一个全量变量a以及函数foo,函数foo中引用了下一段代码中定义的全局变量b。 第二段代码定义了全局变量b以及main函数,同时在main函数中调用了第一个…

ZXL-2000砌体砂浆强度点荷仪

一、产品简介&#xff1a; 砌体砂浆强度点荷仪&#xff08;又名&#xff1a;砂浆点荷仪&#xff09;&#xff0c;是根据GB/T50315-2000《砌体工程现场检验技术规程》而研制生产的。是砌体砂浆强度检测的专用仪器&#xff0c;其特点是能在现场或试验室直接测试&#xff0c;不影…

最短路模型——AcWing 188. 武士风度的牛

最短路模型 定义 最短路模型是图论中的一个经典问题&#xff0c;旨在寻找从图中一个顶点到另一个顶点的路径&#xff0c;使得这条路径上的边&#xff08;或边的权重&#xff09;之和最小。这一模型在许多实际问题中有着广泛的应用&#xff0c;比如网络路由、地图导航、物流配…

【深度学习】图生图img3img论文原理,SD EDIT

https://arxiv.org/abs/2108.01073 摘要 引导图像合成技术使普通用户能够以最小的努力创建和编辑逼真的图像。关键挑战在于平衡对用户输入&#xff08;例如&#xff0c;手绘的彩色笔画&#xff09;的忠实度和合成图像的真实感。现有的基于GAN的方法试图通过使用条件GAN或GAN反…