springboot elasticsearch vue ik中文分词器 实现百度/京东全文搜索

在这里插入图片描述
在这里插入图片描述

背景:实现和百度搜索一样效果的,全文搜索引擎支持关键词高亮显示

文章目录

          • 1. 企业级搜索引擎解决方案
          • 2. 创建索引规则
          • 3. 数据拉取
          • 4. 搜索高亮
          • 5. 自定义词库
          • 6. 效果图
          • 7. 开源源码

1. 企业级搜索引擎解决方案

分词器:english、standard、ik_max_smart、ik_smart、whitespace等

  1. 索引:创建索引时用ik_max_smart进行分词,搜索时使用ik_smart分词器进行搜索
  2. 查询:精准匹配使用term;查询匹配使用match
  3. 类型:需要分词使用text,部分词精准用keyword,分数用double,经纬度用geo_point,数字用integer
2. 创建索引规则
PUT /jd_goods
{"settings" : {"number_of_shards" : 1,"number_of_replicas" : 1},"mappings": {"properties": {"id":{"type": "integer"},"title":{"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},"desc":{"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},"price":{"type": "text"},"img":{"type": "text"}}}
}
3. 数据拉取

http://localhost:9090/parse/vue

    public List<Content> parseJD(String keyword) throws IOException {String baseUrl = "https://search.xxx.com/Search?keyword=";// 解析网页  在线预览中有处理Document document = Jsoup.parse(new URL(baseUrl + keyword), 30000);// 所有js中可以使用的方法,这里都能用Element element = document.getElementById("J_goodsList");//获取搜有的li元素Elements elements = element.getElementsByTag("li");ArrayList<Content> goodList = new ArrayList<>();// 获取元素中的内容,这里el 就是每一个li标签了for (Element el : elements) {//关于这种图片特别多的网站,所有的图片都是拉加载的String img = el.getElementsByTag("img").eq(0).attr("data-lazy-img");String price = el.getElementsByClass("p-price").eq(0).text();String title = el.getElementsByClass("p-name").eq(0).text();Content content = new Content();content.setTitle(title);content.setImg(img);content.setPrice("内容标题 " + price);content.setDesc("内容描述 " + title);goodList.add(content);}return goodList;}

在这里插入图片描述

4. 搜索高亮
  //    2. 获取es中的数据,实现基本搜索高亮功能public List<Map<String, Object>> searchPageHighlight(String keyword, int pageNo, int pageSize) throws IOException {if (pageNo <= 1) {pageNo = 1;}//    条件搜索SearchRequest searchRequest = new SearchRequest(ESConst.JD_SEARCH_INDEX);SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//    分页searchSourceBuilder.from(pageNo);searchSourceBuilder.size(pageSize);//    精准匹配TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery(ESConst.SEARCH_CONDITION_FIELD, keyword);searchSourceBuilder.query(termQueryBuilder);searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));//构建高亮HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.field(ESConst.HIGHLIGHT_TITLE);highlightBuilder.field("desc");highlightBuilder.requireFieldMatch(true);//多个高亮 显示highlightBuilder.preTags(ESConst.HIGHLIGHT_PRE_TAGS);highlightBuilder.postTags(ESConst.HIGHLIGHT_POST_TAGS);searchSourceBuilder.highlighter(highlightBuilder);//    执行搜索searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);//    解析结果ArrayList<Map<String, Object>> list = new ArrayList<>();for (SearchHit hit : searchResponse.getHits().getHits()) {//  解析高亮的字段,将原来的字段置换为我们高亮的字段即可!Map<String, HighlightField> highlightFields = hit.getHighlightFields();HighlightField title = highlightFields.get(ESConst.HIGHLIGHT_TITLE);HighlightField desc = highlightFields.get("desc");//    获取原来的结果Map<String, Object> sourceAsMap = hit.getSourceAsMap();if (title != null) {Text[] fragments = title.fragments();String newTitle = "";for (Text text : fragments) {newTitle += text;}//高亮字段替换掉原来的内容即可sourceAsMap.put(ESConst.SEARCH_CONDITION_FIELD, newTitle);}if (desc != null) {Text[] fragments = desc.fragments();String newDesc = "";for (Text text : fragments) {newDesc += text;}//高亮字段替换掉原来的内容即可sourceAsMap.put("desc", newDesc);}// 将结果放入list容器返回list.add(sourceAsMap);}return list;}
5. 自定义词库

new_word.dic

女包
女士包
java语言

在这里插入图片描述

6. 效果图

http://localhost:9090/

在这里插入图片描述
在这里插入图片描述

7. 开源源码

https://gitee.com/gblfy/es7-jd-vue

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

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

相关文章

学习笔记之数据可视化(一)——项目适配方案

目录 最终效果展示1. 数据可视化适配方案1.1 项目需求1.2 PC端适配方案1.3 使用到的技术2. 数据可视化项目开发项目准备1.1 文件准备1.2 引入js和css文件1.3 CSS样式初始化1.4 VS code 插件安装(任选一款)1.4.1 Live Server1.4.2 Preview on Web Server**~更多内容,请阅读下…

上海鸥新:基于大数据的商场实时客流分析系统

公司介绍 上海鸥新软件有限公司专注于室内定位技术和客流统计与分析的研发&#xff0c;如室内定位引擎、客流统计与分析系统。在用户导入客流系统的同时&#xff0c;为商业零售实体店提供了网络覆盖、微信上网&#xff0c;定时定地点向客户进行精准化商业信息推送等一体化解决…

常见的Ubuntu命令30条(二)

Ubuntu命令是指在Ubuntu操作系统中用于执行各种任务和操作的命令行指令。这些命令可以用于管理系统、配置网络、安装软件、浏览文件等。Ubuntu命令通常在终端&#xff08;Terminal&#xff09;应用程序中输入并执行。 history&#xff1a;显示命令行历史记录。grep&#xff1a…

Elasticsearch的使用RestHighLevelClient

文章目录一、准备1. 导入依赖2. 测试数据二、全文搜索2.1. 匹配搜索&#xff08;会拆词&#xff09;2.2. 短语搜索2.3. queryString搜索2.4. 多字段匹配搜索三、词条级搜索3.1. 词条级搜索3.2. 词条集合搜索(terms query)3.3. 范围搜索( range query)3.4. 不为空搜索(exists qu…

手把手带你搭建一个自己的云服务器并部署Web程序

一. 服务器的购买 我选择的是阿里云的服务器&#xff0c;学生价9.5元一个月&#xff0c;百度直接搜索阿里云&#xff0c;然后点击右上角登录&#xff0c;推荐大家用支付宝扫码登录&#xff0c;方便快捷。阿里云官网的东西比较多&#xff0c;登录后我找了很久也没有找到学生服务…

QingStor分布式存储全线升级:自研需要勇气,成功还要看实力

数据量的爆炸式增长和企业对数据价值挖掘的渴求&#xff0c;正在让存储市场迎来前所未有的发展机遇。一方面&#xff0c;分布式存储正在经历快速的增长时期&#xff0c;IDC 2019年市场预测报告显示&#xff0c;无论是对象存储、文件存储还是块存储&#xff0c;分布式存储在未来…

加入阿里技术团队三年,哪些习惯让我在工作上持续受益?

2017年研究生毕业&#xff0c;我加入阿里巴巴数据库技术团队&#xff0c;从事分布式数据库研发&#xff0c;如今算来已经有三年时间了&#xff0c;在这期间&#xff0c;我深度参与了双十一背后的数据库PolarDB-X从设计到实现的全过程。在这三年的时间里&#xff0c;于我而言&am…

学习笔记之数据可视化(二)——页面布局(上)

~续上一章 2. 项目页面布局2.1 基础布局2.1.1 PC端屏幕宽度适配设置2.1.2 主体容器viewport背景图片2.1.3 HTML结构2.1.4 css样式代码2.2 边框图片2.2.1 使用场景2.3 面板公共样式开发2.3.1 面板边框图片尺寸测量2.3.2 面板 Panel 子容器`.inner`2.3.3 子容器 .inner 边距调整2…

阿里每天究竟要抵御多少攻击

知乎上曾经有一个很有趣的问题。 黑客为什么不攻击淘宝&#xff1f; 这个问题有趣就有趣在&#xff0c;这是典型的外行思维&#xff0c;看似很有道理&#xff0c;但其实问都问错了。 正确的问题是&#xff0c;黑客到底有哪天不在攻击淘宝&#xff1f; 答案是&#xff0c;0.…

征战多云时代,Nutanix这款Kubernetes多云PaaS新利器,你Get到了吗?

当前&#xff0c;全球企业上云步伐加快&#xff0c;企业都有相同的目标&#xff1a;尽快将业务迁移上云&#xff0c;从而减少基础架构成本&#xff0c;提高员工效率&#xff0c;缩短业务研发时间&#xff0c;提供性能可靠的IT系统。 当下&#xff0c;以容器、服务网格、微服务…

学习笔记之数据可视化(二)——页面布局(中)

续上一章 2.6 监控区域布局2.6.1 布局结构解析:2.6.2 样式描述:2.6.3 HTML结构及CSS样式代码2.6.3 ### 监控区域-效果2.6.7 点位区域(point)2.6 监控区域布局 监控区域 monitor盒子高度: 480px,布局划分及内部盒子类名如下: 2.6.1 布局结构解析: .tab样切换:tabs 标…

OFD文件、pdf文件相互转换、ofd文件在线预览

文章目录一、在线预览1. api使用2. 案例3. 效果二、ofd转odf2.1. api使用2.2. 参考案例三、odf转ofd3.1. api使用3.2. 参考案例3.3. 开源项目一、在线预览 1. api使用 ofd文件在线预览: 使用方式&#xff1a; 格式&#xff1a;/ofdViewer/viewer.html?file1.ofd相对路径 2.…

视频会议应用空间广阔 未来“上云”将成趋势

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 此次疫情推动云计算产业迎来加速发展期。此前&#xff0c;根据国务院发展研究中心发布的报告显示&#xff0c;2019年我国云计…

【开发者成长】Vue.js 中有哪些性能陷阱

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 我内心深处对游戏的热爱&#xff0c;让我一直渴望能自己制作一些电子游戏。几个月前我开始将这种梦想变为现实&#xff0c;并…

学习笔记之数据可视化(二)—— 页面布局(下)

续上一章 2.7 地图区域(.map)2.7.1 实现步骤:2.8 用户统计模块2.8.1 布局:2.8.2 柱状图2.9 订单模块2.9.1 订单区域布局2.9.2 订单区域(order)-交互效果(此部分后续补充)3.0 销售统计( sales )3.0.1 布局3.1 渠道分布、季度进度模块3.1.1渠道分布(channel)-雷达图3.1.2…

【职业生涯】这样的开发人员每个团队都想要

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 合作是你职业生涯中不会缺少的一个部分。 什么是团队&#xff1f;团队就为了共同目标而努力的一群人。一个团队实现目标的过…

elasticsearch-7.15.2 同时支持中文ik分词器和pinyin分词器

文章目录1. 自定义分词器2. 映射模型3. 效果图1. 自定义分词器 ES如何支持拼音和中文分词 &#xff1f; 自定义分词器 支持拼音和中文分词 PUT /jd_goods {"settings": {"analysis": {"analyzer": {"ik_smart_pinyin": {"type&…

【数字康复治疗】自闭症市场能否走出供求困境

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 世界卫生组织将每年的4月2日设为“世界提高自闭症意识日”&#xff0c;旨在提高人们对自闭症和相关研究与诊断以及自闭症患者…

微软全球 AKS 女掌门人,这样击破云原生“怪圈”!

来源 | 程序人生作者 | 伍杏玲近年来&#xff0c;“云原生”成为IT界的热词&#xff0c;可什么是“云原生”&#xff1f;不少开发者表示“云里雾里”&#xff0c;更别提如何借助云原生更好地释放云价值。从云原生&#xff08;CloudNative&#xff09;一词中我们看到&#xff0c…

获取Access表字段类型的自定义函数

目录 1.函数(一)1.1 功能说明及代码1.2 自定义函数调用实例2函数(二)3 函数(三)3.1 功能说明及代码3.2 自定义函数调用4 ADO数据类型在Access、SQL Server、Oracle之间的对应关系1.函数(一) 1.1 功能说明及代码 场景:在需要对表中字段的类型进行识别判断时,当用Fie…