Elastic 开发篇 javaAPI(4)
1、解决精确匹配问题,如果不加配置,搜索农大,会搜出“农”“大”这两个字的匹配,我们要的是“农大”,那么好了,加上一个条件搞定;
MatchQuery.Type.PHRASE

完整代码:
package com.thinkgem.jeesite.modules.baffle.service; import com.thinkgem.jeesite.common.service.CrudService;
import com.thinkgem.jeesite.common.utils.EsUtils;
import com.thinkgem.jeesite.modules.ada.dao.ParamRecordExDao;
import com.thinkgem.jeesite.modules.ada.entity.ParamRecordEx;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.search.MatchQuery;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.springframework.stereotype.Service; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map; @Service
public class ElasticDbService extends CrudService<ParamRecordExDao, ParamRecordEx> { public Map<String,Object> searchEsData(String query,int pageNum,int pageSize){
Map<String, Object> map = new HashMap<String, Object>();
long start=System.currentTimeMillis();
try {
TransportClient client= EsUtils.getTransportClient();
MultiMatchQueryBuilder multiMatchQueryBuilder= QueryBuilders
.multiMatchQuery(query,"param_array","service_type")
.type(MatchQuery.Type.PHRASE)
;
HighlightBuilder highlightBuilder=new HighlightBuilder()
.preTags("<span style='color:red'>")
.postTags("</span>")
.field("param_array")
.field("service_type");
SearchResponse searchResponse=client.prepareSearch("approveadapter")
// 匹配度高的排在前面
.setExplain(true)
.setTypes("input")
.setQuery(multiMatchQueryBuilder)
.highlighter(highlightBuilder)
.setFrom((pageNum-1)*pageSize)
.setSize(pageSize)
.execute()
.actionGet(); SearchHits hits=searchResponse.getHits();
ArrayList<Map<String,Object>> newsList=new ArrayList<Map<String, Object>>();
for(SearchHit hit:hits){
Map<String,Object> news=hit.getSourceAsMap();
HighlightField highlightField=hit.getHighlightFields().get("param_array");
if(highlightField!=null){
Text[] fragments=highlightField.fragments();
String hText="";
for(Text text:fragments){
hText+=text;
}
news.put("param_array",hText);
} HighlightField hServiceType=hit.getHighlightFields().get("service_type");
if(hServiceType!=null){
Text[] fragments1=hServiceType.fragments();
String hServiceText="";
for(Text text:fragments1){
hServiceText+=text;
}
news.put("service_type",hServiceText);
} newsList.add(news);
}
long end=System.currentTimeMillis(); map.put("newsList",newsList);
map.put("totalHits",String.valueOf(hits.getTotalHits()));
map.put("totalTime",String.valueOf(end-start)); } catch (Exception e) {
e.printStackTrace();
}
return map;
}
}
Elastic 开发篇 javaAPI(4)的更多相关文章
- Elastic 开发篇(3)
1.报错: java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW 原因: 系统中已引入jackson版本,但版本较低,缺少所需要的字段. 解 ...
- 华清远见金牌讲师名家大讲堂Android开发篇成功举办
2014年3月5日.12日华清远见金牌讲师名家大讲堂(以下简称名家大讲堂)在线讲座全新升级开讲,至此拉开了新一年名家大讲堂的序幕! 华清远见名家大讲堂作为业内颇具影响力的公益免 费线上课程,自2009 ...
- 开年钜献:华清远见金牌讲师名家大讲堂(Android开发篇)
华清远见作为嵌入式培训领导品牌,嵌入式就业课程已成为业内公认的专业人才培养体系!华清远见致力于让更多嵌入式技术爱好者及在校大学生获得一线嵌入式系统开发关键技术应用的经验,于2009年始开办名家 ...
- E8.Net工作流平台开发篇
E8.Net开发篇(一) E8.Net开发框架有哪些源程序模型? E8.Net开发框架为开发企业流程应用系统提供了最佳实践的开发架构.范例及源代码,包括待办事项的组织.流程启动模型.处理模型.母版 ...
- linux一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书)
一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书) --------------------------目录-网络无关篇-目录-------------------------- 0001 修 ...
- 小试ImageMagik——开发篇
===================================================== ImageMagick的使用和开发的文章: 小试ImageMagik--使用篇 小试Imag ...
- .NET Core实战项目之CMS 第十一章 开发篇-数据库生成及实体代码生成器开发
上篇给大家从零开始搭建了一个我们的ASP.NET Core CMS系统的开发框架,具体为什么那样设计我也已经在第十篇文章中进行了说明.不过文章发布后很多人都说了这样的分层不是很合理,什么数据库实体应该 ...
- Mac 配置教程-开发篇
将 Mac 日常使用的软件和开发软件区分开,将之前写的 Mac 配置的文章分成了两篇: Mac 配置教程-日常篇 Mac 配置教程-开发篇 图床 iPic 设置快捷键 Command+Shift+u ...
- Hyperledger fabric-SDK-GO客户端开发篇(六)
Hyperledger fabric-SDK-GO客户端开发篇(六) Fabric-SDK-GO是提供的Go语言开发包,应用程序可以利用Fabric-SDK-GO与fabric网络进行交互并访问链码. ...
随机推荐
- qtp 自动化测试--点滴 自定义显示工具菜单 trzedit
tools-customize-toolbars-勾选后关闭 2 trzedit 使用winobject 方法取值 Window("驷惠WIN系列[汽车4S连锁管理软件] 6.") ...
- 三、oneinstack
一.介绍 oneinstack https://www.cnblogs.com/lxwphp/p/9231554.html
- easy install 与pip
easy_insall的作用和perl中的cpan, ruby中的gem类似,都提供了在线一键安装模块的傻瓜方便方式,而pip是easy_install的改进版, 提供更好的提示信息,删除packag ...
- hdu-3374(kmp+最小表示法)
题意:给你一个字符串,这个字符串我们可以把把他变成n个字符串按照以下规则:将当前字符串第一个放到字符串最后一位,字符串的下标依次向前推一位,比如:s[1] s[2 ]s[3] s[4]->s[2 ...
- Linux下的好用的编辑软件Remarkable
Linux下的好用的编辑软件Remarkable最近着手开始学习Linux,就想着找一款好用的编辑器作笔记,在网上爬了些贴选择了Remarkable.官网崩了,有没有梯子,废了好大力气才装好.于是把资 ...
- kubernetes 构架
- BZOJ5296 [CQOI2018] 破解D-H协议 【数学】【BSGS】
题目分析: 裸题. 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; ; #define mp ...
- Java的equals方法,首先要判断类型是否相同
如下代码,Long 和Integer 进行比较: Integer aa = 1; Long bb= 1L; System.out.println(aa.equals(bb)); 输出为:false 查 ...
- BZOJ 4242: 水壶(Kruskal重构树 + Bfs)
题意 一块 \(h ∗ w\) 的区域,存在障碍.空地.\(n\) 个建筑,从一个建筑到另一个建筑的花费为:路径上最长的连续空地的长度. \(q\) 次询问:从建筑 \(s_i\) 到 \(t_i\) ...
- Mysql连接报错:1130 - Host ‘118.111.111.111’ is not allowed to connect to this MariaDB server
这个问题是因为在数据库服务器中的mysql数据库中的user的表中没有权限(也可以说没有用户),下面将记录我遇到问题的过程及解决的方法. 在搭建完LNMP环境后用Navicate连接出错 遇到这个问题 ...