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网络进行交互并访问链码. ...
随机推荐
- bash中的pasue
#!/bin/bash echo 按任意键继续 read -n
- Delphi MDI 子窗体的创建和销毁 [zhuan]
1.如果要创建一个mdi child,先看是否有这个child 存在,如果有,则用它,如果没有再创建 //该函数判断MDI 子窗体是否存在,再进行创建和显示function isInclude(for ...
- How to ssh
ssh -p 22 cuthead@127.0.0.1
- jpa 比较复杂的查询和用in关键字
in关键字使用代码
- fftshift
说明:本文为转载http://blog.csdn.net/myathappy/article/details/51344618 Matlab fftshift 详解 一.实信号情况 因为实信号以fs为 ...
- BZOJ2434 [NOI2011] 阿狸的打字机 【树链剖分】【线段树】【fail树】【AC自动机】
题目分析: 画一下fail树,就会发现就是x的子树中属于y路径的,把y剖分一下,用线段树处理 $O(n*log^2 n)$. 代码: #include<bits/stdc++.h> usi ...
- GIL、进/线程池、同/异步、阻/非阻塞
1 GIL:全局解释器锁 GIL本质就是一把互斥锁,是夹在解释器身上的, 同一个进程内的所有线程都需要先抢到GIL锁,才能执行解释器代码 2.GIL的优缺点: 优点: 保证Cpython解释器内存管理 ...
- 一个模拟——抢票部分功能的 简单版(主要实例化一下 Lock 的使用)
""" 抢票! 多个用户在同时读写同一个数据 """ from multiprocessing import Process,Lock im ...
- 【XSY1551】往事 广义后缀数组 线段树合并
题目大意 给你一颗trie树,令\(s_i\)为点\(i\)到根的路径上的字符组成的字符串.求\(max_{u\neq v}(LCP(s_u,s_v)+LCS(s_u,s_v))\) \(LCP=\) ...
- Rainbond v5.1.2发布,微服务架构应用便捷管理和交付
Rainbond v5.1.2发布,微服务架构应用便捷管理和交付 Rainbond是开源的企业应用云操作系统,支撑企业应用的开发.架构.交付和运维的全流程,通过无侵入架构,无缝衔接各类企业应用,底层资 ...