全文检索的方式
来源:互联网 发布:php网站开发实例 编辑:程序博客网 时间:2024/04/29 04:09
目前行业网站的全文检索的方式主要有两种
方式一:通过数据库自带的全文索引
方式二:通过程序来自建全文索引系统
以Sql Server 2005为例
2005本身就自带全文索引功能,你可以先对数据库表建立索引,具体如何建索引网上搜索一下,建立完索引之后,你就可以用SQL来实现检索功能,例如:select * from ytbxw where contaiins(字段,' 中国');多个查询值之间可以用and 或 or来实现,在单表以及单表视图上建全文索引对2005来说根本不是问题,但在多表视图建全文索引2005目前还无法实现这个功能,拿www.ytbxw.com为例,其每个栏目的信息都是分开存放的,所以在检索上就无法用该方法来解决这个问题.
下面重点说一下如何用程序来实现检索功能
如果你想自己开发一个全文检索系统,我想这是相当复杂事情,要想实现也不是那么容易的事情,所以在这里我推荐一套开源程序,那就是DotLucene,我想大家可能都听过这个东东吧,那我就讲讲如何来实现多表情况下的全文检索.
1、新建winform项目,把Lucene.Net.dll添加到该项目中来
2、创建一个类,类名可以自己取
public class Indexer
{
private IndexWriter writer;
//在指定路径下创建索引文件
public Indexer(string directory)
{
writer = new IndexWriter(directory, new StandardAnalyzer(), true);
writer.SetUseCompoundFile(true);
}
//将信息添加到索引文件中
/*
Field.Text:为索引+读取
Field.UnIndexed:不需要做索引
*/
public void AddHtmlDocument(string path,string title,string content)
{
Document doc = new Document();
doc.Add(Field.Text("text", content));
doc.Add(Field.UnIndexed("path", path));
doc.Add(Field.Text("title", title));
writer.AddDocument(doc);
}
//解析HTML,过滤HTML代码
private string parseHtml(string html)
{
string temp = Regex.Replace(html, "<[^>]*>", "");
return temp.Replace(" ", " ");
}
//从页面中获取文章标题
private string getTitle(string html)
{
Match m = Regex.Match(html, "<title>(.*)</title>");
if (m.Groups.Count == 2)
return m.Groups[1].Value;
return "(unknown)";
}
//添加新闻到索引
public void AddNews()
{
//从数据库获取记录(这部分略过)
for (int i = 1; i <= PageSize; i++)
{
RootId = int.Parse(dr["ClassId"].ToString().Substring(0, 2));
// 写入索引
AddHtmlDocument(http://www.ytbxw.com + dr["Id"].ToString() + ".html", dr["Title"].ToString(), parseHtml(dr["Content"].ToString()));
}/info/
}
//关闭索引
public void Close()
{
writer.Optimize();
writer.Close();
}
}
以上就是建立索引的过程,在数据读取的时候最好分披读,比如一次300条,这样效率会比较高.
- 全文检索的方式
- 全文检索的实现方式
- 关于全文检索方式
- GeoName的全文检索
- 全文检索的基本原理
- SQLite的全文检索
- 全文检索的基本原理
- 全文检索的基本原理
- 全文检索的基本原理
- 全文检索的基本原理
- 全文检索的基本原理
- 全文检索的原理
- 全文检索的基本原理
- 全文检索的基本原理
- 全文检索的基本原理
- 全文检索的基本原理
- 全文检索的基本原理
- 全文检索的基本原理
- ClearCase完全攻略(三) UCM下的一些概念全解析1
- 【STM32 .Net MF开发板学习-06】蜂鸣器和LED数码管显示
- Ogre3D开放资源地带 是什么地方呀?
- 使用Qt 开发一个屏幕录像程序
- 【C++】Chapter19:命令模式
- 全文检索的方式
- 三段感人小故事
- myeclipse的Debug问题。
- ZOJ 1115
- 写给当代大学生的18条建议
- (转)树状数组
- 二十四条成熟法则,你符合几条?
- Java中Split函数的用法技巧
- struts2 东拼西凑