关于Lucene.net 中高亮显示关键词的深究
这几天一直在学习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 中高亮显示关键词的深究的更多相关文章
- 【Vue.js】基于vue的实时搜索,在结果中高亮显示关键词
一.搜素效果如下: 二.核心 1)利用oninput属性来触发搜素功能 2)利用RegExp来对字符串来全局匹配关键字,利用replace方法来对匹配的关键字进行嵌入高亮的<span class ...
- 【lucene系列学习二】Lucene实现高亮显示关键词
首先,导入下图所示库 然后,import org.apache.lucene.search.highlight.*; 下面,我们新建一个实现高亮显示功能的函数 public static String ...
- dedecms后台批量替换文章中的关键词
DEDECMS怎么样能快捷或者批量修改网站所有文章的超链接和锚文本,超链和所有关键词锚文本的链接需要修改? dedecms后台批量替换文章中的关键词
- JS批量替换内容中关键词为超链接,避开已存在的链接和alt、title中的关键词
懂点seo的人都知道要给内容中关键词加上链接,形成站内锚文本链接,这对seo有很大的帮助. 思路就是在数据库中录入若干个关键词和关键词对应的链接,当然链接可以根据关键词的id自动生成,或者直接用关键词 ...
- 2017.10.19 java中的关键词 及软件开发的一些重要单词
1.java中的关键词 ·final 最后的 (1)可以修饰表示该类不能被继承 (2)可以修饰方法不能被重写 ·sattic 静态的 类的 (1)修饰属性 可以通过类直接调用 可以通过对象调用 (2) ...
- php中use关键词使用场景
php中use关键词使用场景,主要使用在函数内部使用外包得变量才使用得 1,这种函数使用不到外包变量 $messge="96net.com.cn"; $exam=function ...
- 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 ...
- springboot+lucene实现公众号关键词回复智能问答
一.场景简介 最近在做公众号关键词回复方面的智能问答相关功能,发现用户输入提问内容和我们运营配置的关键词匹配回复率极低,原因是我们采用的是数据库的Like匹配. 这种模糊匹配首先不是很智能,而且也没有 ...
- 基于Vue实现关键词实时搜索高亮显示关键词
最近在做移动real-time-search于实时搜索和关键词高亮显示的功能,通过博客的方式总结一下,同时希望能够帮助到别人~~~ 如果不喜欢看文字的朋友我写了一个demo方便已经上传到了github ...
随机推荐
- C#的循环语句练习
1.输入一个整数,算出从1到这个数每个数阶乘的和. 2.求100以内质数的和. 3.有一对幼兔,幼兔1个月后长成小兔,小兔1个月后长成成兔并生下一对幼兔,问几个月后有多少对兔子,幼兔,小兔,成兔分别是 ...
- 使用jquery、ajax不刷新页面打印表格(返回数据类型text、json);
效果图: 一:返回数据是text时 1.表单代码: <body> <form action="#" method="post"> 姓名: ...
- hrbust 1481
/* 构造特定条件的68序列:给定目标串中6 8 68 86 这四种字串的个数a b p q ,输出所有满足条件的字符串中代表的数字最小的那个 // hrboj 1481 ______________ ...
- relative
进行relative定位后的元素,不会影响原本的文本流. 下图左列的第二张图是进行了margin-top取负值,右列第二张图进行了relative定位
- 推荐一个Jenkins 插件 Build Failure Analyzer
Wiki https://wiki.jenkins-ci.org/display/JENKINS/Build+Failure+Analyzer 作用: 按照预定的build failure 去解析co ...
- 学习笔记-Java编程思想
2016-01-03 Swith(整数选择因子):必须是int或char这样的整数值. Java中不包含goto语句,但是可以通过标识符实现类似的控制.
- redis主从配置
首先安装redis 我的redis安装在/app/redis/文件夹下 第二步,写两个redis实例的配置文件,一主一从.我的设计如下,6379端口为主,6380端口为从. 6379:redis_ma ...
- java代码
io的使用 package com.tan.io; import java.io.*; import java.util.*; class Employee{ private String name; ...
- JSBinding / Testing
Unity version compatibilities 5.3.5 5.2.0 5.1.5 5.0.4 4.7.2 4.7.0 4.6.9 4.6.0 4.5.5 Platform compati ...
- 如何用ABBYY FineReader识别图片中的文本
ABBYY FineReader 12是一款OCR光学字符识别软件,能够快速方便地将扫描纸质文档.PDF文件和数码相机的图像转换成可编辑.可搜索的文本,让电脑处理更具效率,摆脱从前的烦恼,告别耗时费力 ...