问题描述
我写了一个搜索的小项目,想利用es来实现高亮搜索,但是突然发现,我的搜索功能,只能搜出来英文譬如java,dior,vue等等,但是像医学,高等数学就搜不出来了!
解决思路
一开始,我以为是我的请求发送过去导致了中文乱码
new Vue({
el:'#app',
data:{
keyword:'' ,//搜索的关键字
results:[] //搜索的结果
},
methods:{
searchKey(){
var keyword = this.keyword;
console.log(keyword);
//对接后端接口
axios.get('search/'+keyword+"/1/20").then(response=>{
console.log(response);
//绑定数据
this.results = response.data;
})
}
}
})
我以为我的后台收到的请求keyword搜索关键字乱码了,但是后台打印一下发现并没有乱码!!
再次寻找解决思路
我后来查阅资料好像说是分词器的问题!!!诶,有道理
我就试了试单搜一个“医”字或者“学”发现真能搜出来,那么也就有一点眉目了,但是这个分词器要改么?我一开始觉得是词库没有医学之类的词语,天真!!人家词库量太大,不可能没有医学两个字的词语,然后就问大佬,看博客,后来找到了一片类似的博客
老哥的原连接:https://blog.csdn.net/qq_44961149/article/details/107300665
有兴趣的可以去看一下
原因出在:
//实现搜索功能
public List<Map<String,Object>> searchPage(String keyword,int pageNo,int pageSize) throws IOException {
if (pageNo<1){
pageNo = 1;
}
/