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)的更多相关文章

  1. Elastic 开发篇(3)

    1.报错: java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW 原因: 系统中已引入jackson版本,但版本较低,缺少所需要的字段. 解 ...

  2. 华清远见金牌讲师名家大讲堂Android开发篇成功举办

    2014年3月5日.12日华清远见金牌讲师名家大讲堂(以下简称名家大讲堂)在线讲座全新升级开讲,至此拉开了新一年名家大讲堂的序幕! 华清远见名家大讲堂作为业内颇具影响力的公益免 费线上课程,自2009 ...

  3. 开年钜献:华清远见金牌讲师名家大讲堂(Android开发篇)

        华清远见作为嵌入式培训领导品牌,嵌入式就业课程已成为业内公认的专业人才培养体系!华清远见致力于让更多嵌入式技术爱好者及在校大学生获得一线嵌入式系统开发关键技术应用的经验,于2009年始开办名家 ...

  4. E8.Net工作流平台开发篇

    E8.Net开发篇(一)   E8.Net开发框架有哪些源程序模型? E8.Net开发框架为开发企业流程应用系统提供了最佳实践的开发架构.范例及源代码,包括待办事项的组织.流程启动模型.处理模型.母版 ...

  5. linux一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书)

    一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书) --------------------------目录-网络无关篇-目录-------------------------- 0001 修 ...

  6. 小试ImageMagik——开发篇

    ===================================================== ImageMagick的使用和开发的文章: 小试ImageMagik--使用篇 小试Imag ...

  7. .NET Core实战项目之CMS 第十一章 开发篇-数据库生成及实体代码生成器开发

    上篇给大家从零开始搭建了一个我们的ASP.NET Core CMS系统的开发框架,具体为什么那样设计我也已经在第十篇文章中进行了说明.不过文章发布后很多人都说了这样的分层不是很合理,什么数据库实体应该 ...

  8. Mac 配置教程-开发篇

    将 Mac 日常使用的软件和开发软件区分开,将之前写的 Mac 配置的文章分成了两篇: Mac 配置教程-日常篇 Mac 配置教程-开发篇 图床 iPic 设置快捷键 Command+Shift+u ...

  9. Hyperledger fabric-SDK-GO客户端开发篇(六)

    Hyperledger fabric-SDK-GO客户端开发篇(六) Fabric-SDK-GO是提供的Go语言开发包,应用程序可以利用Fabric-SDK-GO与fabric网络进行交互并访问链码. ...

随机推荐

  1. vs code安装

    vs code是一款文本编辑器,开源,是前端界的vs,而Dreamweaver适合入门. user版本的一些系统分区文件夹无法创建,可能存在语言显示问题.一般用户建议使用system版. 下载链接:h ...

  2. 替换JDK 对eclipse的影响?

    问题  替换原有的JDK 对 eclipse有影响么? 之前用的eclipse是32位的,我的电脑是64位的,装的JDK是也是32位的,所以不影响使用! 但是,前两天装了一个ideal,新配置了一个9 ...

  3. Vue之v-for、v-show使用举例

    demo.html <!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/19 ...

  4. 在Linq to sql 和 Entity framework 中使用lambda表达式实现left join

    在Linq to sql 和 Entity framework 中使用lambda表达式实现left join 我们知道lambda表达式在Linq to sql 和 Entity framework ...

  5. socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少

    常识一:文件句柄限制 在Linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是"Socket/File ...

  6. fastjson 操作

    1.String 转 bean String addition = ...; CoffeeFormula formula = JSON.parseObject(addition, new TypeRe ...

  7. swagger如何测试List类型参数

    使用swagger 时,往往会用到类似下面这样的注解 @ApiImplicitParam(name = "id", value = "主键", dataType ...

  8. 对如下字符串(234453)[234]{2324}分析它的括号使用是否正确,括号匹配(Java实现)

    我的一种思路是递归: private static String s = "(2344[)]53[234]{2324}"; private static boolean f(int ...

  9. ueditor 编辑器常用方法

    官方文档http://fex.baidu.com/ueditor/ 简单实现工具栏调用: //实现方法 ue.getDialog("工具名称"); //工具名称可以参考如下: to ...

  10. python学习日记(迭代器、生成器)-乱七八糟

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...