Lucene.net 全文检索 盘古分词
lucene.net + 盘古分词
引用:
1.Lucene.Net.dll
2.PanGu.Lucene.Analyzer.dll
3.PanGu.HighLight.dll
4.PanGu.dll
using Lucene.Net.Search;
using Lucene.Net.Store;
using Lucene.Net.QueryParsers;
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Analysis;
using Lucene.Net.Analysis.PanGu;
using PanGu.HighLight;
using PanGu;
1.建立索引:
static string path = @"G:\indextest";//索引文件储存位置 static void CreateIndex()
{
//创建索引库目录
var directory = FSDirectory.Open(new DirectoryInfo(path));
Analyzer analyzer = null;
//analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29); if (isPangu)
{
analyzer = new PanGuAnalyzer();//盘古Analyzer
}
else
{
analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
} //创建一个索引,采用StandardAnalyzer对句子进行分词
IndexWriter indexWriter = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
MySqlConnection conn = new MySqlConnection(@"server=localhost;User Id=root;password=123456;Database=ecshop");
conn.Open();
MySqlCommand cmd = new MySqlCommand("select goods_name,goods_brief from ecs_goods", conn);
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
//域的集合:文档,类似于表的行
Document doc = new Document();
//要索引的字段
doc.Add(new Field("goods_name", reader["goods_name"].ToString(), Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("goods_brief", reader["goods_brief"].ToString(), Field.Store.YES, Field.Index.ANALYZED));
indexWriter.AddDocument(doc);
}
reader.Close();
//对索引文件进行优化
indexWriter.Optimize();
indexWriter.Close();
}
2.搜索:
protected void Page_Load(object sender, EventArgs e)
{
keyword = Request.Form["q"];
if (keyword != null && keyword != "")
{
var watch = Stopwatch.StartNew();
Analyzer analyzer = null;
analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29); //搜索
IndexSearcher searcher = new IndexSearcher(FSDirectory.Open(new DirectoryInfo(path)), true); //查询表达式
QueryParser queryP = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "goods_name", analyzer); //query.parse:注入查询条件
Query query = queryP.Parse(keyword);
var hits = searcher.Search(query, ); //create highlighter
//IFormatter formatter = new SimpleHTMLFormatter("<span style=\"font-weight:bold;color: red;\">", "</span>");
//SimpleFragmenter fragmenter = new SimpleFragmenter(80);
//var scorer = new QueryScorer(query);
//Highlighter highlighter = new Highlighter(formatter, scorer);
//highlighter.TextFragmenter = fragmenter; //PanGu create highlighter
PanGu.HighLight.SimpleHTMLFormatter simpleHTMLFormatter =
new PanGu.HighLight.SimpleHTMLFormatter("<span style=\"font-weight:bold;color: red;\">", "</span>");
PanGu.HighLight.Highlighter highlighter =
new PanGu.HighLight.Highlighter(simpleHTMLFormatter,
new Segment());
highlighter.FragmentSize = ; for (int i = ; i < hits.totalHits; i++)
{
Document doc = searcher.Doc(hits.scoreDocs[i].doc);
//TokenStream stream = analyzer.TokenStream("goods_name", new StringReader(doc.Get("goods_name")));
//String sample = highlighter.GetBestFragments(stream, doc.Get("goods_name"), 2, "...");
goods g = new goods();
g.goods_name = highlighter.GetBestFragment(keyword, doc.Get("goods_name"));
g.goods_brief = highlighter.GetBestFragment(keyword, doc.Get("goods_brief"));
gs.Add(g);
} watch.Stop(); tasktime = "搜索耗费时间:" + watch.ElapsedMilliseconds + "毫秒";
}
}
多字段搜索
string[] fields = { "Title", "Content" };
MultiFieldQueryParser mq = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_29, fields, analyzer);
Query multiquery = mq.Parse(keyword);// MultiFieldQueryParser.Parse(Lucene.Net.Util.Version.LUCENE_29, new string[] { keyword }, fields, analyzer);
var hits1 = searcher.Search(multiquery, );
Lucene.net 全文检索 盘古分词的更多相关文章
- Net Core使用Lucene.Net和盘古分词器 实现全文检索
Lucene.net Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎, ...
- Lucene.Net和盘古分词应用
Lucene.Net.dll:用做全文索引 PanGu.dll(盘古分词):作为中文分词的条件 大致原理: 1.Lucene先根据PanGu将需要搜索的内容分隔.分词,然后根据分词的结果,做一个索引页 ...
- Lucene.Net 与 盘古分词
1.关键的一点,Lucene.Net要使用3.0下面的版本号,否则与盘古分词接口不一致. 关键代码例如以下 using System; using System.IO; using System.Co ...
- Lucene.net入门学习(结合盘古分词)
Lucene简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整 ...
- Lucene.net入门学习(结合盘古分词)(转载)
作者:释迦苦僧 出处:http://www.cnblogs.com/woxpp/p/3972233.html 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显 ...
- 【原创】Lucene.Net+盘古分词器(详细介绍)
本章阅读概要 1.Lucenne.Net简介 2.介绍盘古分词器 3.Lucene.Net实例分析 4.结束语(Demo下载) Lucene.Net简介 Lucene.net是Lucene的.net移 ...
- Lucene.Net+盘古分词器(详细介绍)(转)
出处:http://www.cnblogs.com/magicchaiy/archive/2013/06/07/LuceneNet%E7%9B%98%E5%8F%A4%E5%88%86%E8%AF%8 ...
- Lucene.Net+盘古分词
前言 各位朋友,谢谢大家的支持,由于文件过大,有考虑到版权的问题,故没有提供下载,本人已建立一个搜索技术交流群:77570783,源代码已上传至群共享,需要的朋友,请自行下载! 首先自问自答几个问题, ...
- 完整的站内搜索Demo(Lucene.Net+盘古分词)
前言 首先自问自答几个问题,以让各位看官了解写此文的目的 什么是站内搜索?与一般搜索的区别? 很多网站都有搜索功能,很多都是用SQL语句的Like实现的,但是Like无法做到模糊匹配(例如我搜索“.n ...
随机推荐
- FFMpeg ver 20160213-git-588e2e3 滤镜中英文对照
1 FFMpeg ver 20160213-git-588e2e3 滤镜中英文对照 2016.02.18 by 1CM 2 T.. = Timeline support 3 支持时间轴 4 .S. = ...
- Greedy:Paint Color(AOJ 0531)
涂颜料 题目大意:在一个1000000*1000000的矩阵中放入几块木板,问你这些木板把矩阵划分成了几个区域?输入会给左下角和右上角的坐标,输入W==0且H==0结束. 这一题是书上的作业题,书上有 ...
- Linux中环境变量文件及配置(转载)
一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登 ...
- 【QT】C++ GUI Qt4 学习笔记1
Find对话框实现 平台 Qt5.3.2 MinGW4.8.2 注意创建时用QDialog finddialog.h #ifndef FINDDIALOG_H #define FINDDIALOG_H ...
- 【编程题目】在从 1 到 n 的正数中 1 出现的次数
30.在从 1 到 n 的正数中 1 出现的次数(数组)题目:输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数.例如输入 12,从 1 到 12 这些整数中包含 1 的 ...
- Google140道面试题
FQ找来,可能历史比较悠久了,慢慢看. 原文连接:http://www.impactinterview.com/2009/10/140-google-interview-questions/ Goog ...
- 数据结构One_Vector(向量的简单实现)
#include <iostream> using namespace std; template<typename Object> class Vector { privat ...
- 对于大一学习计算机的新手(c/c++ )提出一些学习经验
对于刚刚上大一的新手,且是那种十分有上进的学生,在学习计算机的过程中必然会有一大堆的困惑,比如: 1 .如何学好编程(这与以往的应试教育完全不同,按照以往的那种学习方式,看书刷题不过是成为一个考试学霸 ...
- iOS应用支持IPV6,就那点事儿
原文连接 果然是苹果打个哈欠,iOS行业内就得起一次风暴呀.自从5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,大家便开始热火朝天的研究如何支持IPV6 ...
- No space left on device you must specify the filesystem type--Linux重启挂在失败
在Linux中拷贝了一个文件比较大5G,直接提示:No SPace Left On Device,很明显是磁盘空间不够了,我因为是在虚拟机上面建的,直接右击虚拟机==>编辑设置 如图片1所示, ...