首页

解决solr的关键词匹配结果高亮结果页出现有undefined内容问题

标签:solr,apache,匹配,高亮,undefined,无结果,hl     发布时间:2016-11-20   

一、问题内容

对于搜索匹配结果关键词高亮显示,通过solr的hl.simple.pre和hl.simple.post的接口参数可以设置(详情见其相关参数配置示例页面),但之前本站搜索结果内老是出现“undefined“的记录,如下图所示

解决solr的关键词匹配结果高亮结果页出现有undefined内容问题

二、解决方法

1. 搜索结果标题通过result - doc节点显示内容,通过result -highlighting显示匹配到高亮部分的对应内容,如下图

解决solr的关键词匹配结果高亮结果页出现有undefined内容问题

2. 对于匹配到highlighting区域标题、摘要及关键词内容存在hl_title、hl_zhaiyao及hl_keywords属性进行返回,但是对于没有匹配,只会显示在result-doc部分

3. 但是对于之前前端js脚本没有考虑没有返回的情况,如下图

                 $("#search_list").append(@b@                     tdata.replace(/{{url}}/g,"/_site_domain_"+root["data"][i].url)@b@                     .replace(/{{title}}/g,root["data"][i].hl_title)@b@                     .replace(/{{zhaiyao}}/g,root["data"][i].hl_zhaiyao)@b@                     .replace(/{{keywords}}/g,root["data"][i].hl_keywords)@b@                     .replace(/{{addtime}}/g,root["data"][i].createtime.substring(0,10)) @b@                     .replace(/{{score}}/g,_score) @b@                       @b@                 );

改为如下所示

                 var stitle=root["data"][i].hl_title;@b@                 var szhaiyao=root["data"][i].hl_zhaiyao;@b@                 var skwords=root["data"][i].hl_keywords;@b@                 @b@                 if(stitle==null||stitle==''||stitle==undefined){@b@                    stitle=root["data"][i].title;@b@                 }@b@                 @b@                 if(szhaiyao==null||szhaiyao==''||szhaiyao==undefined){@b@                    szhaiyao=root["data"][i].zhaiyao;@b@                 }@b@                 @b@                 if(skwords==null||skwords==''||skwords==undefined){@b@                    skwords=root["data"][i].keywords;@b@                 }@b@                 @b@                 $("#search_list").append(@b@                     tdata.replace(/{{url}}/g,"/_site_domain_"+root["data"][i].url)@b@                     .replace(/{{title}}/g,stitle)@b@                     .replace(/{{zhaiyao}}/g,szhaiyao)@b@                     .replace(/{{keywords}}/g,skwords)@b@                     .replace(/{{addtime}}/g,root["data"][i].createtime.substring(0,10)) @b@                     .replace(/{{score}}/g,_score) @b@                       @b@                 );