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. 怎样利用ADO中的adoquery进行缓存更新?????(100分)

    我用BDE时,用query与updatesql相结合进行缓存更新,但是在ADO中没有updatesql,只有用adoquery,在DBGRID中,用CANCELUPADTE,只能取消一条记录,烦恼不已 ...

  2. web浏览器兼容问题

    1.居中问题 div中,ie默认居中,而ff(firefox)默认是向左对齐.解决办法:margin 0 auto 2.高度问题 如果有两个div排列或者嵌套,如果第一个div设置了高度,而内容超出d ...

  3. Java使用RabbitMQ之整合Spring(生产者)

    依赖包 <!--RabbitMQ集成spring--> <!-- https://mvnrepository.com/artifact/org.springframework.amq ...

  4. Linq:使用Take和Skip实现分页

    Skip,Take: list = list.Skip(pageNum * pageSize).Take(pageSize).ToList(); pageSize :表示一页多少条. pageNum: ...

  5. CML\LVDS

    LVDS和CML电平应用区别 https://wenku.baidu.com/view/6bb0066f011ca300a6c3908c.html

  6. 【NLP】大白话讲解word2vec到底在做些什么

    转载自:http://blog.csdn.net/mylove0414/article/details/61616617 词向量 word2vec也叫word embeddings,中文名“词向量”, ...

  7. 【C/C++】实现数据结构广义表

    1. 广义表的定义     每个元素可以为Atom,原子,也可以为线性表.      线性表的推广.线性表元素有唯一的前驱和后继,为线性表,而广义表是多层次的线性表      表头:第一个元素,可能是 ...

  8. CH2906 武士风度的牛(算竞进阶习题)

    水..... 直接bfs... #include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; typedef l ...

  9. Matplotlib学习---matplotlib里颜色,标记,线条类型参数的选择(colors, markers, line styles)

    颜色(Colors): 基础颜色: character color 'b' blue 'g' green 'r' red 'c' cyan 'm' magenta 'y' yellow 'k' bla ...

  10. IOS端 margin-top 和 margin-bottom 使用负数时的区别

    有以下html代码 <div style="width: 30%;" class="shang"> 1 </div> <div s ...