修改 lucene Highlighter.net 2.0 版本一处Bug
来源:互联网 发布:福建网络通信企业排名 编辑:程序博客网 时间:2024/06/05 11:37
修改 HighLight.net 2.0 版本一处Bug
作者:肖波
最近我的博客中有两位网友在使用 KTDictSeg 1.3 + lucene.net 2.0 + HighLighter.net 2.0 是出现问题,高度怀疑是HighLight.net 2.0 版本的Bug,
今天腾出时间把几个组件的源码全部下下来,调试了一把,终于找到了这个Bug,下面把Bug的具体原因和修改后的源码发上来,供大家参考。另外哪位网友
知道如何向 lucene apache 组织 申报Bug,麻烦告知一声,以便我将这个Bug提交给该组织,让它的后续版本可以改进这个错误。
错误信息:(网友 z86362780 发现)
异常详细信息: System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。
参数名: length
行 131: Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer analyzer =new Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer();
行 132: TokenStream tokenStream = analyzer.TokenStream("indexcontent", new StringReader(content));
行 133: myrow[4] = highlighter.GetBestFragment(tokenStream, content); <---这一句报错了
行 134:
行 135: mytab.Rows.Add(myrow);
我调试代码后发现错误出在 Highlighter.cs 这个文件的第263行 GetBestTextFragments 这个函数中,注Highlight.net 的版本号是 2.0.0.001, 下载位置
原始版本故障部分代码如下:
错误出在第6行: tokenText = text.Substring(startOffset, (endOffset) - (startOffset));
当endOffset >= text.Length时就会出现上述错误。这个错误并非每次都会出现,只有在搜索条件和文本信息处于某些特殊情况下才会出现,具体什么情况下会出现这个错误,我没有仔细研究。出现错误时,通常是endOffset 的值等于 text.Length.
找到错误后,我进行了如下修改:
修改后再运行,故障排除。
我修改后的版本的完整代码和编译好的库的下载位置 HighLight2.0.0.002-XiaoBo
我将版本号设置为2.0.0.002以便和原始版本的区别,这个只是一个临时版本,等故障上报给lucene apache 组织 后,
等该组织修改了其正式版本,这个版本就可以退休了。
作者:肖波
最近我的博客中有两位网友在使用 KTDictSeg 1.3 + lucene.net 2.0 + HighLighter.net 2.0 是出现问题,高度怀疑是HighLight.net 2.0 版本的Bug,
今天腾出时间把几个组件的源码全部下下来,调试了一把,终于找到了这个Bug,下面把Bug的具体原因和修改后的源码发上来,供大家参考。另外哪位网友
知道如何向 lucene apache 组织 申报Bug,麻烦告知一声,以便我将这个Bug提交给该组织,让它的后续版本可以改进这个错误。
错误信息:(网友 z86362780 发现)
异常详细信息: System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。
参数名: length
行 131: Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer analyzer =new Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer();
行 132: TokenStream tokenStream = analyzer.TokenStream("indexcontent", new StringReader(content));
行 133: myrow[4] = highlighter.GetBestFragment(tokenStream, content); <---这一句报错了
行 134:
行 135: mytab.Rows.Add(myrow);
我调试代码后发现错误出在 Highlighter.cs 这个文件的第263行 GetBestTextFragments 这个函数中,注Highlight.net 的版本号是 2.0.0.001, 下载位置
原始版本故障部分代码如下:
1 if (tokenGroup.numTokens > 0)
2 {
3 //flush the accumulated text (same code as in above loop)
4 startOffset = tokenGroup.startOffset;
5 endOffset = tokenGroup.endOffset;
6 tokenText = text.Substring(startOffset, (endOffset) - (startOffset));
7 System.String markedUpText = formatter.HighlightTerm(encoder.EncodeText(tokenText), tokenGroup);
8 //store any whitespace etc from between this and last group
9 if (startOffset > lastEndOffset)
10 newText.Append(encoder.EncodeText(text.Substring(lastEndOffset, (startOffset) - (lastEndOffset))));
11 newText.Append(markedUpText);
12 lastEndOffset = endOffset;
13 }
2 {
3 //flush the accumulated text (same code as in above loop)
4 startOffset = tokenGroup.startOffset;
5 endOffset = tokenGroup.endOffset;
6 tokenText = text.Substring(startOffset, (endOffset) - (startOffset));
7 System.String markedUpText = formatter.HighlightTerm(encoder.EncodeText(tokenText), tokenGroup);
8 //store any whitespace etc from between this and last group
9 if (startOffset > lastEndOffset)
10 newText.Append(encoder.EncodeText(text.Substring(lastEndOffset, (startOffset) - (lastEndOffset))));
11 newText.Append(markedUpText);
12 lastEndOffset = endOffset;
13 }
错误出在第6行: tokenText = text.Substring(startOffset, (endOffset) - (startOffset));
当endOffset >= text.Length时就会出现上述错误。这个错误并非每次都会出现,只有在搜索条件和文本信息处于某些特殊情况下才会出现,具体什么情况下会出现这个错误,我没有仔细研究。出现错误时,通常是endOffset 的值等于 text.Length.
找到错误后,我进行了如下修改:
1 if (tokenGroup.numTokens > 0)
2 {
3 //flush the accumulated text (same code as in above loop)
4 startOffset = tokenGroup.startOffset;
5 endOffset = tokenGroup.endOffset;
6
7 //The original version did not judged the endOffset < text.Length.
8 //It will throw a exception when endOffset >= text.Length sometimes.
9 //Xiao Bo fix this bug at 2008-07-09
10 if (endOffset < text.Length)
11 {
12 tokenText = text.Substring(startOffset, (endOffset) - (startOffset));
13 System.String markedUpText = formatter.HighlightTerm(encoder.EncodeText(tokenText), tokenGroup);
14 //store any whitespace etc from between this and last group
15 if (startOffset > lastEndOffset)
16 newText.Append(encoder.EncodeText(text.Substring(lastEndOffset, (startOffset) - (lastEndOffset))));
17 newText.Append(markedUpText);
18 }
19
20 lastEndOffset = endOffset;
21 }
2 {
3 //flush the accumulated text (same code as in above loop)
4 startOffset = tokenGroup.startOffset;
5 endOffset = tokenGroup.endOffset;
6
7 //The original version did not judged the endOffset < text.Length.
8 //It will throw a exception when endOffset >= text.Length sometimes.
9 //Xiao Bo fix this bug at 2008-07-09
10 if (endOffset < text.Length)
11 {
12 tokenText = text.Substring(startOffset, (endOffset) - (startOffset));
13 System.String markedUpText = formatter.HighlightTerm(encoder.EncodeText(tokenText), tokenGroup);
14 //store any whitespace etc from between this and last group
15 if (startOffset > lastEndOffset)
16 newText.Append(encoder.EncodeText(text.Substring(lastEndOffset, (startOffset) - (lastEndOffset))));
17 newText.Append(markedUpText);
18 }
19
20 lastEndOffset = endOffset;
21 }
修改后再运行,故障排除。
我修改后的版本的完整代码和编译好的库的下载位置 HighLight2.0.0.002-XiaoBo
我将版本号设置为2.0.0.002以便和原始版本的区别,这个只是一个临时版本,等故障上报给lucene apache 组织 后,
等该组织修改了其正式版本,这个版本就可以退休了。
- 修改 lucene Highlighter.net 2.0 版本一处Bug
- 修改 highlighter.net-1.4.0 一处Bug
- Lucene的高亮器Highlighter
- Lucene中的highlighter
- Lucene+HighLighter高亮显示实例
- Lucene+HighLighter 搜索关键字高亮显示
- Lucene.net 系列一
- Lucene.net 系列一
- Lucene.Net系列一
- Lucene.net 系列一
- Lucene.net 系列一
- Lucene.Net 2.3.1开发介绍——附录一、如何下载Lucene.Net的各种版本
- Lucene.Net 2.3.1开发介绍——附录一、如何下载Lucene.Net的各种版本
- Lucene.Net 2.3.1开发介绍——附录一、如何下载Lucene.Net的各种版本
- 修改bug心得一
- lucene高亮器——lucene-highlighter-2.4.0.jar下载
- openstack bug跨版本修改
- lucene-使用Highlighter高亮显示查询项
- 用 CSS 实现的阴影效果
- ls命令
- flex 初始化完成前加载自定义XML数据
- 静态切分窗口的替换与更新
- Siebel Tools 开发学习笔记(一)
- 修改 lucene Highlighter.net 2.0 版本一处Bug
- 在XSL模板文件中嵌入JavaScript脚本
- C#经典再现——《C#本质论》
- Java开源项目大全
- lsnrctl命令的使用
- mysqldump的编码问题
- Eclispe 体系结构综述(一)
- 蛋白质结构域示意图绘制软件 —— DOG 1.0
- Bar Code (条形码) 打印出现乱码的问题解决方案