zoukankan      html  css  js  c++  java
  • Lucene.Net.Search.Highlight.FragmentQueue 中的派生方法 LessThan 不能减少访问

    天运用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

  • 相关阅读:
    paste DEMO合并文件
    diff 文件比较
    grep DEMO
    tr DEMO
    uniq DEMO
    sort DEMO
    定义提示符 PS1 PS4
    MAVEN修改localRepository不起作用
    java数组初始化
    oracle监听服务无法打开
  • 原文地址:https://www.cnblogs.com/88223100/p/1269874.html
Copyright © 2011-2022 走看看