这几天一直在学习lucene,也写了3篇自己总结的知识点,本以为很容易上手的东西,但是却遇到了一个很棘手的问题,借此,希望可以跟大家探讨一下

问题:使用盘古高亮显示组件后,如搜索“mp3 player”,搜索词中间包含空格,但是搜出来的结果,经过高亮后,空格莫名其妙的没了,具体不知道是怎么回事,如果去掉高亮的话,搜出来的结果中就有空格

代码:

////用于搜索的代码

Lucene.Net.Store.FSDirectory dir = Lucene.Net.Store.FSDirectory.GetDirectory(basePath);
Lucene.Net.Search.IndexSearcher search = new Lucene.Net.Search.IndexSearcher(dir, true);
Lucene.Net.Search.BooleanQuery boolQuery = new Lucene.Net.Search.BooleanQuery();

Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "title", pgAnalyzer);
boolQuery.Add(parser.Parse(kw), Lucene.Net.Search.BooleanClause.Occur.MUST);

parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "keywords", pgAnalyzer);
boolQuery.Add(parser.Parse(kw), Lucene.Net.Search.BooleanClause.Occur.SHOULD);

parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "productsummary", pgAnalyzer);
boolQuery.Add(parser.Parse(kw), Lucene.Net.Search.BooleanClause.Occur.SHOULD);

Lucene.Net.Search.Hits hits = search.Search(boolQuery);
List<ProductInfo> lists = PageList(hits, pageIndex, pageSize);
if (lists != null && lists.Count > 0)
{
records = hits.Length();
rptList.DataSource = lists;
rptList.DataBind();
}
dir.Close();

///分页显示的结果处理,其中ProductInfo是自己定义的一个数据结果体

public List<ProductInfo> PageList(Lucene.Net.Search.Hits hits, int pageIndex, int pageSize)
{
List<ProductInfo> lists = new List<ProductInfo>();
if (hits == null)
return null;
if (hits.Length() <= 0)
return null;
int totalPages = hits.Length() % pageSize == 0 ? hits.Length() / pageSize : hits.Length() / pageSize + 1;//总页数
if (pageIndex <= 0)
pageIndex = 1;
if (pageIndex > totalPages)
pageIndex = totalPages;
for (int i = (pageIndex - 1) * pageSize; i < pageIndex * pageSize && i < hits.Length(); i++)
{
Lucene.Net.Documents.Document doc = hits.Doc(i);
ProductInfo item = new ProductInfo();
item.AttributeCustom = doc.Get("attributecustom");
item.BusinessType = doc.Get("businesstype");
item.CompanyName = doc.Get("companyname");
item.CountryName = doc.Get("countryname");
item.Guid = doc.Get("guid");
item.LocalPic = doc.Get("localpic");
item.MemberId = doc.Get("memberid");
item.ProductSummary = doc.Get("productsummary");
item.Title = doc.Get("title");
item.UrlTitle = doc.Get("urltitle");
lists.Add(item);
}
return lists;
}

///高亮方法,在repeter绑定数据源时传入当前的title调用

protected string hightLightTitle(string title)
{
if (string.IsNullOrEmpty(title))
return string.Empty;
if (string.IsNullOrEmpty(title))
return string.Empty;
PanGu.HighLight.Highlighter highter = new PanGu.HighLight.Highlighter(formatter, new PanGu.Segment());
highter.FragmentSize = 100;
return highter.GetBestFragment(kw, title);
}

比如:搜索 “China Shine Globe”,出来的结果如下

关键词中的空格莫名其妙的没了,真的很让人费解,小弟研究了好久叶没搞明白,希望各位大侠可以指导指导

关于Lucene.net 中高亮显示关键词的深究的更多相关文章

  1. 【Vue.js】基于vue的实时搜索,在结果中高亮显示关键词

    一.搜素效果如下: 二.核心 1)利用oninput属性来触发搜素功能 2)利用RegExp来对字符串来全局匹配关键字,利用replace方法来对匹配的关键字进行嵌入高亮的<span class ...

  2. 【lucene系列学习二】Lucene实现高亮显示关键词

    首先,导入下图所示库 然后,import org.apache.lucene.search.highlight.*; 下面,我们新建一个实现高亮显示功能的函数 public static String ...

  3. dedecms后台批量替换文章中的关键词

    DEDECMS怎么样能快捷或者批量修改网站所有文章的超链接和锚文本,超链和所有关键词锚文本的链接需要修改? dedecms后台批量替换文章中的关键词

  4. JS批量替换内容中关键词为超链接,避开已存在的链接和alt、title中的关键词

    懂点seo的人都知道要给内容中关键词加上链接,形成站内锚文本链接,这对seo有很大的帮助. 思路就是在数据库中录入若干个关键词和关键词对应的链接,当然链接可以根据关键词的id自动生成,或者直接用关键词 ...

  5. 2017.10.19 java中的关键词 及软件开发的一些重要单词

    1.java中的关键词 ·final 最后的 (1)可以修饰表示该类不能被继承 (2)可以修饰方法不能被重写 ·sattic 静态的 类的 (1)修饰属性 可以通过类直接调用 可以通过对象调用 (2) ...

  6. php中use关键词使用场景

    php中use关键词使用场景,主要使用在函数内部使用外包得变量才使用得 1,这种函数使用不到外包变量 $messge="96net.com.cn"; $exam=function ...

  7. Lucene 4.7 --高亮显示

    jar lucene-analyzers-common-4.7.0.jar lucene-analyzers-smartcn-4.7.0.jar lucene-core-4.7.0.jar lucen ...

  8. springboot+lucene实现公众号关键词回复智能问答

    一.场景简介 最近在做公众号关键词回复方面的智能问答相关功能,发现用户输入提问内容和我们运营配置的关键词匹配回复率极低,原因是我们采用的是数据库的Like匹配. 这种模糊匹配首先不是很智能,而且也没有 ...

  9. 基于Vue实现关键词实时搜索高亮显示关键词

    最近在做移动real-time-search于实时搜索和关键词高亮显示的功能,通过博客的方式总结一下,同时希望能够帮助到别人~~~ 如果不喜欢看文字的朋友我写了一个demo方便已经上传到了github ...

随机推荐

  1. 移动web开发和移动app开发的区分

    1.移动web开发 这部分跟web前端开发差别不大,使用的技术都是html+css+js.区别为手机浏览器是webkit的天下,pc端是IE的天 下.手机网页可以理解成pc网页的缩小版加一些触摸特性. ...

  2. Java中类的数据成员的初始化顺序

    对于单一类: 属性初始化 ---> 按顺序执行静态初始化块(只能操作静态属性) ---> 按顺序执行初始化块 ---> 构造方法 对于存在继承关系的类: 父类属性初始化 ---> ...

  3. spring注解 aop

    @Resource(name="as")  为空按类型装配 @autowired 按类型 @quafiler (name="xx") 按名称 spring继承关 ...

  4. Eclipse搭建SSH(Struts2+Spring+Hibernate)框架教程

    | 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 确实,刚创博客,对于这个陌生的东西还是有些许淡然.这是我的第一篇博文,希望能给你们有帮助,这就是我最大的乐趣! 好了下面进入正题: SS ...

  5. ABBYY PDF Transformer+怎么标志注释

    ABBYY PDF Transformer+是一款可创建.编辑.添加注释及将PDF文件转换为其他可编辑格式的通用工具,可用来在PDF页面的任何位置添加注释(关于如何通过ABBYY PDF Transf ...

  6. java-final关键字

    一.final理解 编程语言中关键字,final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的.在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个 ...

  7. OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]

    http://blog.163.com/jekyll_zhou@126/blog/static/1820473820123206189381/ OJDBC版本区别 [ojdbc14.jar,ojdbc ...

  8. Android 卡片计数器

    该文用英文写的,可以到我的英文博客中阅读.

  9. Ubuntu下,python输出中文

    python教程里说,如果要输出非英语文本就加前缀u或U, 例如: print u"你好啊,祖国" print u"こんにちは.私はとてもいいです" 结果会报错 ...

  10. vuejs,router

    接下来我们要做的是vue的路由处理,首先当然是安装: npm install vue-router 接下打开我们的main.js,引入我们vue-router,然后在告诉vue我们要使用我们的vue- ...