现在的位置: 首页 > 综合 > 正文

Lucene.Net.Search.Highlight.FragmentQueue 中的派生方法 LessThan 不能减少访问

2013年07月06日 ⁄ 综合 ⁄ 共 2074字 ⁄ 字号 评论关闭

天运用Lucene.net做全文索引查询时,碰到了这个问题。在baidu搜索了一下,也有朋友碰到同样的问题:

我在ASP.NET中使用Lucene.NET组件实现高亮显示..可是出现问题..说什么不能访问(如下图),另外如果在ASP.NET中建立索引后..搜索时有些东西搜索不到,在WinForm中又没事..这又是什么问题呢??请牛人们帮忙
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.TypeLoadException: 程序集 Highlighter, Version=1.3.2.1, Culture=neutral, PublicKeyToken=null 的类型 Lucene.Net.Search.Highlight.FragmentQueue 中的派生方法 LessThan 不能减少访问。
源错误:
行 169: row["title"] = doc.Get("title");
行 170: row["path"] = "http://www.dotlucene.net/documentation/api/1.4/" + path.Replace("\\", "/");
行 171: row["sample"] = highlighter.GetBestFragments(plainText, 80, 2, "...");
行 172:
行 173: this.Results.Rows.Add(row);
以上是在ASP.NET中使用高亮显示时出现的问题


后来自己找到了解决办法:
原因出于Lucene.Net.dll 和 Highlighter.Net.dll的版本不一致。你要检查一下,你的项目中引用的Lucene.Net.dll是2.0的,而 Highlighter.Net.dll不是2.0的,这一点从上面“ row["sample"] = highlighter.GetBestFragments(plainText, 80, 2, "..."); ” 这句可以看出。因为2.0的GetBestFragments方法的参数列表不同,在我的解决方案中是用了
public System.String GetBestFragment ( Lucene.Net.Analysis.TokenStream tokenStream , System.String text )方法

关键代码如下:
   using Lucene.Net.Documents;
   using Lucene.Net.Analysis.Standard;
   using Lucene.Net.Search;
   using Lucene.Net.QueryParsers;
   using Lucene.Net.Index;
   using Lucene.Net.Store;
   using Lucene.Net.Highlight;
   using Lucene.Net.Analysis;
   using System.IO;

      //内容
      string text = doc.GetField("Content").StringValue();
      //某数据记录对象
     Result result = new Result();      
      // 高亮显示设置
      SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color=\"red\">", "</font>");
      highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));     
      //关键内容显示大小设置 
      highlighter.SetTextFragmenter(new SimpleFragmenter(200));      
      //取出高亮显示内容
      TokenStream tokenStream = analyzer.TokenStream("Content", new StringReader(text));
      result.Content = highlighter.GetBestFragment(tokenStream,text);

 参考文章:http://blog.sina.com.cn/u/54c1567b010008st
http://hi.baidu.com/buliu/blog/item/115ee83d542735c59e3d6225.html
http://www.tianyablog.com/blogger/post_show.asp?BlogID=114714&PostID=2852189

本文转自http://www.cnblogs.com/huazai8204/archive/2007/08/10/793114.html

抱歉!评论已关闭.