lucene.net + 盘古分词

引用:

1.Lucene.Net.dll

2.PanGu.Lucene.Analyzer.dll

3.PanGu.HighLight.dll

4.PanGu.dll

  1. using Lucene.Net.Search;
  2. using Lucene.Net.Store;
  3. using Lucene.Net.QueryParsers;
  4. using Lucene.Net.Documents;
  5. using Lucene.Net.Index;
  6. using Lucene.Net.Analysis.Standard;
  7. using Lucene.Net.Analysis;
  8. using Lucene.Net.Analysis.PanGu;
  9. using PanGu.HighLight;
  10. using PanGu;

1.建立索引:

  1. static string path = @"G:\indextest";//索引文件储存位置
  2.  
  3. static void CreateIndex()
  4. {
  5. //创建索引库目录
  6. var directory = FSDirectory.Open(new DirectoryInfo(path));
  7. Analyzer analyzer = null;
  8. //analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
  9.  
  10. if (isPangu)
  11. {
  12. analyzer = new PanGuAnalyzer();//盘古Analyzer
  13. }
  14. else
  15. {
  16. analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
  17. }
  18.  
  19. //创建一个索引,采用StandardAnalyzer对句子进行分词
  20. IndexWriter indexWriter = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
  21. MySqlConnection conn = new MySqlConnection(@"server=localhost;User Id=root;password=123456;Database=ecshop");
  22. conn.Open();
  23. MySqlCommand cmd = new MySqlCommand("select goods_name,goods_brief from ecs_goods", conn);
  24. MySqlDataReader reader = cmd.ExecuteReader();
  25. while (reader.Read())
  26. {
  27. //域的集合:文档,类似于表的行
  28. Document doc = new Document();
  29. //要索引的字段
  30. doc.Add(new Field("goods_name", reader["goods_name"].ToString(), Field.Store.YES, Field.Index.ANALYZED));
  31. doc.Add(new Field("goods_brief", reader["goods_brief"].ToString(), Field.Store.YES, Field.Index.ANALYZED));
  32. indexWriter.AddDocument(doc);
  33. }
  34. reader.Close();
  35. //对索引文件进行优化
  36. indexWriter.Optimize();
  37. indexWriter.Close();
  38. }

2.搜索:

  1.      protected void Page_Load(object sender, EventArgs e)
  2. {
  3. keyword = Request.Form["q"];
  4. if (keyword != null && keyword != "")
  5. {
  6. var watch = Stopwatch.StartNew();
  7. Analyzer analyzer = null;
  8. analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
  9.  
  10. //搜索
  11. IndexSearcher searcher = new IndexSearcher(FSDirectory.Open(new DirectoryInfo(path)), true);
  12.  
  13. //查询表达式
  14. QueryParser queryP = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "goods_name", analyzer);
  15.  
  16. //query.parse:注入查询条件
  17. Query query = queryP.Parse(keyword);
  18. var hits = searcher.Search(query, );
  19.  
  20. //create highlighter
  21. //IFormatter formatter = new SimpleHTMLFormatter("<span style=\"font-weight:bold;color: red;\">", "</span>");
  22. //SimpleFragmenter fragmenter = new SimpleFragmenter(80);
  23. //var scorer = new QueryScorer(query);
  24. //Highlighter highlighter = new Highlighter(formatter, scorer);
  25. //highlighter.TextFragmenter = fragmenter;
  26.  
  27. //PanGu create highlighter
  28. PanGu.HighLight.SimpleHTMLFormatter simpleHTMLFormatter =
  29. new PanGu.HighLight.SimpleHTMLFormatter("<span style=\"font-weight:bold;color: red;\">", "</span>");
  30. PanGu.HighLight.Highlighter highlighter =
  31. new PanGu.HighLight.Highlighter(simpleHTMLFormatter,
  32. new Segment());
  33. highlighter.FragmentSize = ;
  34.  
  35. for (int i = ; i < hits.totalHits; i++)
  36. {
  37. Document doc = searcher.Doc(hits.scoreDocs[i].doc);
  38. //TokenStream stream = analyzer.TokenStream("goods_name", new StringReader(doc.Get("goods_name")));
  39. //String sample = highlighter.GetBestFragments(stream, doc.Get("goods_name"), 2, "...");
  40. goods g = new goods();
  41. g.goods_name = highlighter.GetBestFragment(keyword, doc.Get("goods_name"));
  42. g.goods_brief = highlighter.GetBestFragment(keyword, doc.Get("goods_brief"));
  43. gs.Add(g);
  44. }
  45.  
  46. watch.Stop();
  47.  
  48. tasktime = "搜索耗费时间:" + watch.ElapsedMilliseconds + "毫秒";
  49. }
  50. }

多字段搜索

  1. string[] fields = { "Title", "Content" };
  2. MultiFieldQueryParser mq = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_29, fields, analyzer);
  3. Query multiquery = mq.Parse(keyword);// MultiFieldQueryParser.Parse(Lucene.Net.Util.Version.LUCENE_29, new string[] { keyword }, fields, analyzer);
  4. var hits1 = searcher.Search(multiquery, );

Lucene.net 全文检索 盘古分词的更多相关文章

  1. Net Core使用Lucene.Net和盘古分词器 实现全文检索

    Lucene.net Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎, ...

  2. Lucene.Net和盘古分词应用

    Lucene.Net.dll:用做全文索引 PanGu.dll(盘古分词):作为中文分词的条件 大致原理: 1.Lucene先根据PanGu将需要搜索的内容分隔.分词,然后根据分词的结果,做一个索引页 ...

  3. Lucene.Net 与 盘古分词

    1.关键的一点,Lucene.Net要使用3.0下面的版本号,否则与盘古分词接口不一致. 关键代码例如以下 using System; using System.IO; using System.Co ...

  4. Lucene.net入门学习(结合盘古分词)

    Lucene简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整 ...

  5. Lucene.net入门学习(结合盘古分词)(转载)

    作者:释迦苦僧  出处:http://www.cnblogs.com/woxpp/p/3972233.html  本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显 ...

  6. 【原创】Lucene.Net+盘古分词器(详细介绍)

    本章阅读概要 1.Lucenne.Net简介 2.介绍盘古分词器 3.Lucene.Net实例分析 4.结束语(Demo下载) Lucene.Net简介 Lucene.net是Lucene的.net移 ...

  7. Lucene.Net+盘古分词器(详细介绍)(转)

    出处:http://www.cnblogs.com/magicchaiy/archive/2013/06/07/LuceneNet%E7%9B%98%E5%8F%A4%E5%88%86%E8%AF%8 ...

  8. Lucene.Net+盘古分词

    前言 各位朋友,谢谢大家的支持,由于文件过大,有考虑到版权的问题,故没有提供下载,本人已建立一个搜索技术交流群:77570783,源代码已上传至群共享,需要的朋友,请自行下载! 首先自问自答几个问题, ...

  9. 完整的站内搜索Demo(Lucene.Net+盘古分词)

    前言 首先自问自答几个问题,以让各位看官了解写此文的目的 什么是站内搜索?与一般搜索的区别? 很多网站都有搜索功能,很多都是用SQL语句的Like实现的,但是Like无法做到模糊匹配(例如我搜索“.n ...

随机推荐

  1. Nodejs 及 NPM 的安装

    Nodejs 及 NPM 的安装,有两种方式: 方式1.Nodejs 及 NPM  一起安装 https://nodejs.org/en/download/  下载  Windows Installe ...

  2. poj 2378 (dijkstra)

    http://poj.org/problem?id=2387 一个dijkstra的模板题 #include <stdio.h> #include <string.h> #de ...

  3. poj 2251

    http://poj.org/problem?id=2251 一道简单的BFS,只不过是二维数组,变三维数组,也就在原来基础上加了两个方向. 题意就是从S走到E,#不能走. #include < ...

  4. linux学习之一些琐碎知识点

    一.python 问:django中project和app之间到底有什么不同? 答:他们的区别就是一个是配置,另一个是代码. 一个project包含很多个django app以及对它们的配置.技术上, ...

  5. code vs1706 求合数和(数论 素数的判定)

    1706 求合数和  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解  查看运行结果     题目描述 Description 用户输入一个数,然后输出 ...

  6. 手把手教你实现折线图之------安卓最好用的图表库hellocharts之最详细的使用介绍

    因为项目需要搞一个折线图,按照日期显示相应的成绩,所以有了本文. 以前用过一次XCL-chart,但是感觉只适合固定图表,不去滑动的那种,因为你一滑动太卡了你懂得(毕竟作者好久没更新优化了),拙言大神 ...

  7. struts2拦截器+监听器 .

    一.拦截器是怎么实现: 实际上它是用Java中的动态代理来实现的 二.拦截器在Struts2中的应用 对于Struts2框架而言,正是大量的内置拦截器完成了大部分操作.像params拦截器将http请 ...

  8. 生成Geometry

    // 由一组点集生成一张三角面片网格Geometry osg::Geometry* createTRIANGLESGeometry(MyMesh &mesh) { osg::ref_ptr&l ...

  9. chrome进入控制台时自动进入断点模式的解决方法

    简单粗暴,不知道为什么,去掉那个√就好了

  10. python基础——枚举类

    python基础——枚举类 当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份: JAN = 1 FEB = 2 MAR = 3 ... NOV = 11 DEC = 12 好处是简单 ...