当前位置: 首页 > news >正文

Elasticsearch6实践

目录

目录

一、需求

二、ES索引设计

三、页面搜索条件

四、ES的分页搜索DSL语句

五、其他


一、需求

    公告列表,需要支持以下搜索

1、根据文本输入,模糊搜索公告标题和公告正文。
2、支持公告类型搜索,单选
3、支持根据公告所在省市区搜索,可多选。如,可以同时选中“浙江”,“广州”,“朝阳区”
4、支持公告包含的行业搜索,行业包括一级行业、二级行业,可多选。
5、支持公告发布的时间搜索,如最近7天,最近一个月,或选定一段日期范围。
7、支持根据公告中涉及到的金额范围搜索,如1万-10万,10万-200万,200万-500万,可选择多个范围

二、ES索引设计

{"aliases":{"announcement_index_read":{},"announcement_index_write":{}},"settings":{"index":{"sort.field":"createTime", //默认根据公告发布时间排序"sort.order":"desc"},"analysis":{"analyzer":{"ik_max_word_ignore_html":{   "type":"custom","char_filter":["html_strip"],"tokenizer":"ik_max_word"},"comma":{"type":"pattern","pattern":","}},"char_filter":{"html_char_filter":{"escaped_tags":[],"type":"html_strip"}}}},"mappings":{"_doc":{"properties":{"id":{"type":"keyword"},"districtCodes":{   //省市区信息,存储省市区的code,如浙江省、杭州市、余杭区,对应存储”100,101,111",支持根据浙江省搜索到该公告,也支持根据区搜索到该公告"type":"text","analyzer":"comma"},"annTypes":{ //公告类型,一个公告可能对应多个类型,多个类型都逗号分隔存储"type":"text","analyzer":"comma"},"announcementId":{"type":"keyword"},"title":{  //公告标题,支持根据标题模糊搜索"type":"text","analyzer":"ik_max_word","search_analyzer":"ik_smart"},"createTime":{    //公告发布时间"type":"date","format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"},"amount":{   //公告涉及到的金额"type":"double"},"industryNames":{  //行业名称,包含所有一级行业和二级行业,多个行业用逗号分隔,如“安防,电子电器,数码产品”。支持根据行业名称模糊搜索,支持根据多个行业精确搜索。"type":"text","fields":{"fuzzy":{"type":"text","analyzer":"ik_max_word"},"keyword":{"type":"keyword"}},"analyzer":"comma","search_analyzer":"ik_smart"},"industryNameJson":{  //行业信息,前端页面展示需要嵌套格式的行业信息,纯展示使用,存储一级行业、二级行业嵌套的json格式,如"[{\"firstIndustryName\":\"安防\",\"secondIndustryName\":\"安防设备\"},{\"firstIndustryName\":\"行政办公\",\"secondIndustryName\":\"办公用品\"}]""type":"text"},"content":{    //公告正文内容,内容包含html标签,需要根据输入内容模糊搜索"type":"text","term_vector":"with_positions_offsets","analyzer":"ik_max_word_ignore_html","search_analyzer":"ik_smart"}}}}
}

三、页面搜索条件

搜索条件,公告类型=”招标公告“,行业=”安防和办公“,金额范围为100万到200万和20万到50万,发布日期为2021/03/03到2023/10/12,标题和正文内容匹配”信息化“

{"annType":"招标公告","industry":"安防,办公","amountRange":"100#200,20#50","districtCodes":"330000,650000","createTimeRange":"2021/03/03#2023/10/12","searchValue":"信息化","sort":"desc","curPage":1,"pageSize":10
}

四、ES的分页搜索DSL语句

    注:支持根据标题和正文内容搜索,实际是同时匹配title和content两个字段,DSL是把两个字段的查询包装在一个should中,每个字段的匹配operator默认使用or,将operator改成and后,精度变准确了。

{"size":10,"query":{"bool":{"filter":[{"terms":{"annTypes":["招标公告"],"boost":1}},{"terms":{"districtCodes":["330000","650000"],"boost":1}},{"range":{"createTime":{"include_lower":true,"include_upper":false,"from":1614700800000,"boost":1,"to":1697126399000}}},{"bool":{"adjust_pure_negative":true,"should":[{"range":{"amount":{"include_lower":true,"include_upper":true,"from":100000000,"boost":1,"to":200000000}}},{"range":{"amount":{"include_lower":true,"include_upper":true,"from":20000000,"boost":1,"to":50000000}}}],"minimum_should_match":"1","boost":1}},{"bool":{"adjust_pure_negative":true,"should":[{"match":{"industryNames.fuzzy":{"auto_generate_synonyms_phrase_query":true,"query":"信息化","zero_terms_query":"NONE","fuzzy_transpositions":true,"boost":1,"prefix_length":0,"operator":"AND","lenient":false,"max_expansions":50}}},{"match":{"content":{"auto_generate_synonyms_phrase_query":true,"query":"信息化","zero_terms_query":"NONE","fuzzy_transpositions":true,"boost":1,"prefix_length":0,"operator":"AND","lenient":false,"max_expansions":50}}},{"match":{"title":{"auto_generate_synonyms_phrase_query":true,"query":"信息化","zero_terms_query":"NONE","fuzzy_transpositions":true,"boost":1,"prefix_length":0,"operator":"AND","lenient":false,"max_expansions":50}}}],"boost":1}}],"adjust_pure_negative":true,"must":[{"terms":{"industryNames":["安防","办公"],"boost":1}}],"boost":1}},"from":0,"_source":{"exclude":["content"]},"sort":[{"releasedTime":{"order":"desc"}}],"timeout":"20s"
}

五、其他

     ES分页搜索,返回条数有限制,最大不能超过1万条,查询总行数会返回正确行数,但超过1万条后返回的数据为空,故,需要在产品设计的时候对前端分页做一下限制,如一页10条数据,最大只展示1000页。

相关文章:

Elasticsearch6实践

目录 目录 一、需求 二、ES索引设计 三、页面搜索条件 四、ES的分页搜索DSL语句 五、其他 一、需求 公告列表,需要支持以下搜索 1、根据文本输入,模糊搜索公告标题和公告正文。 2、支持公告类型搜索,单选 3、支持根据公告所在省市区搜…...

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15)

目录 一、理论 1.K8S集群升级 2.集群概况 3.升级集群 4.验证集群 二、实验 1.升级集群 2.验证集群 三、问题 1.给node1节点打污点报错 一、理论 1.K8S集群升级 (1)概念 搭建K8S集群的方式有很多种,比如二进制,kubeadm…...

毅速丨3D打印随形水路模具日常如何保养

3D打印随形水路的蜿蜒曲折甚至细微水路,使得其容易发生堵塞并难以清洗,一旦堵塞将对生产带来不小的影响。事实上,堵塞的发生是逐步发展的,所以在生产过程中应注意监控,一旦发现冷却效果下降应及时检查。以下是一些防患…...

尚品甄选2023全新SpringBoot+SpringCloud企业级微服务项目

最适合新手入门的SpringBootSpringCloud企业级微服务项目来啦!如果你已经学习了Java基础、SSM框架、SpringBoot、SpringCloud,想找一个项目来实战练习;或者你刚刚入行,需要可以写到简历中的微服务架构项目! 项目采用前…...

204、RabbitMQ 之 使用 topic 类型的 Exchange 实现通配符路由

目录 ★ 使用topic实现通配符路由代码演示topic通配符类型的Exchange代码演示:ConstantUtilConnectionUtilProducerConsumer01执行结果生产者消费者01消费者02 完整代码:ConstantUtilConnectionUtilProducerConsumer01Consumer02pom.xml ★ 使用topic实现通配符路由…...

qq视频录制教程,让你的视频更加精彩

“qq视频可以录制吗?浏览qq的时候发现一段有趣的视频,点击下载却一直显示失败,朋友叫我把视频录制下来,但是我不知道怎么操作,想问问大家,有没有办法录制qq的视频。” 在信息化的时代,通过视频…...

(滑动窗口) 76. 最小覆盖子串 ——【Leetcode每日一题】

❓76. 最小覆盖子串 难度:困难 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字符,我们寻找的子字符串…...

grep批量筛选指定目录下的所有日志并写入文件内

背景:在指定目录下,该目录下有上百个日志文件,这些文件以.log结尾 需求:遍历这些日志文件,对每个日志文件进行grep筛选,筛选出包含namexxx和 "server_port":"8088"的内容,并…...

JVM第三讲:JVM 基础-字节码的增强技术详解

JVM 基础-字节码的增强技术详解 本文是JVM第三讲,JVM 基础-字节码的增强技术。在上文中,着重介绍了字节码的结构,这为我们了解字节码增强技术的实现打下了基础。字节码增强技术就是一类对现有字节码进行修改或者动态生成全新字节码文件的技术…...

JWT前后端分离在项目中的应用

14天阅读挑战赛当你累了,要学会休息,而不是放弃! 目录 一、JWT简介 1.1 什么是JWT 1.2 为什么要使用JWT,与session的区别 1.3 JWT组成及工作原理和流程 二、JWT工具类解析 2.1 生成JWT 2.2 解析oldJwt 2.3 复制JWT并延时…...

系统架构师备考倒计时23天(每日知识点)Redis篇

Redis篇 1.Redis与Memcache能力对比 工作MemCacheRedis数据类型简单 key/value 结构丰富的数据结构持久性不支持支持分布式存储客户端哈希分片/一致性哈希多种方式,主从、Sentinel、Cluster 等多线程支持支持支持(Redis5.0及以前版本不支持)内存管理私有内存池/内…...

WIN11系统设置重启与睡眠唤醒后自动拨号

文章目录 1. win x快捷键后选择计算机管理2. 编辑名称3. 选择计算机启动时4. 启动程序5. 输入脚本6. 勾选选项7. 填写配置8. 新建触发器9. 设置触发器10. 确定之后完成创建 1. win x快捷键后选择计算机管理 在任务计划程序中创建基本任务 2. 编辑名称 3. 选择计算机启动时 4…...

【【萌新的SOC学习之AXI-DMA环路测试】】

萌新的SOC学习之AXI-DMA环路测试 AXI DMA环路测试 DMA(Direct Memory Access,直接存储器访问)是计算机科学中的一种内存访问技术。它允许某些计算机内部的硬件子系统可以独立地直接读写系统内存,而不需中央处理器(CPU)介入处理。…...

Lua教程

Lua教程(简单易懂)-CSDN博客 博客相关解释: 5、循环 a {"a", "b"}for i, v in ipairs(a) doprint(i, v)end 代码创建了一个名为 a 的数组,并使用 ipairs 迭代这个数组的元素。运行结果显示了每个元素的索引(下标&am…...

《Node.js+Express+MongoDB+Vue.js全栈开发实战》简介

今天介绍的这本书是《Node.jsExpressMongoDBVue.js全栈开发实战》。该书由清华大学出版社于2023年1月出版 外观 从书名故名思议,就是基于Node.jsExpressMongoDBVue.js来实现企业级应用全栈开发。 封面风格比较简约,插图是一张类似于罗马时代战车形象&…...

多输入多输出 | MATLAB实现CNN-BiGRU-Attention卷积神经网络-双向门控循环单元结合SE注意力机制的多输入多输出预测

多输入多输出 | MATLAB实现CNN-BiGRU-Attention卷积神经网络-双向门控循环单元结合SE注意力机制的多输入多输出预测 目录 多输入多输出 | MATLAB实现CNN-BiGRU-Attention卷积神经网络-双向门控循环单元结合SE注意力机制的多输入多输出预测预测效果基本介绍程序设计往期精彩参考…...

阿里云r7服务器内存型CPU采用

阿里云服务器ECS内存型r7实例是第七代内存型实例规格族,CPU采用第三代Intel Xeon可扩展处理器(Ice Lake),基频2.7 GHz,全核睿频3.5 GHz,计算性能稳定,CPU内存比1:8,2核16G起步&#…...

Godot2D角色导航-自动寻路教程(Godot设置导航代理的目标位置)

文章目录 创建导航NavigationAgent2D节点设置目标位置其他文章 创建导航 首先,创建一个基本的场景,下面的文章讲解了如何创建一个基本的导航场景,点击如下链接前往该文章: Godot2D角色导航-自动寻路教程 NavigationAgent2D节点 …...

R语言实现向量自回归和误差修正模型——附实战代码

大家好,我是带我去滑雪! 向量自回归(VAR)模型和误差修正模型(ECM)是时间序列分析中常用的两种模型,它们用于研究多个变量之间的动态关系。VAR 模型适用于研究多个相关变量之间的相互影响和动态关…...

原理:用UE5制作一个2D游戏

选中资产图片右键--Sprite Actions--Apply Paper2D Texture Settings 制作场景 把它丢到场景里,并把坐标归零 创建图块集tileset 打开新建的tile set,根据最小图块设置最小尺寸单元 选择需要的图块单元,add box 对新建的tile set右键创建til…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...