如何用C#实现数据库全文检索

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何用C#实现数据库全文检索

目前行业网站的全文检索的方式主要有两种

方式一:通过数据库自带的全文索引

方式二:通过程序来自建全文索引系统

以Sql Server 2005为例

2005本身就自带全文索引功能,你可以先对数据库表建立索引,具体如何建索引网上搜索一下,建立完索引之后,你就可以用SQL来实现检索功能,例如:select * from ytbxw where contaiins(字段,' 中国');多个查询值之间可以用and 或or来实现,在单表以及单表视图上建全文索引对2005来说根本不是问题,但在多表视图建全文索引2005目前还无法实现这个功能,拿为例,其每个栏目的信息都是分开存放的,所以在检索上就无法用该方法来解决这个问题.

下面重点说一下如何用程序来实现检索功能

如果你想自己开发一个全文检索系统,我想这是相当复杂事情,要想实现也不是那么容易的事情,所以在这里我推荐一套开源程序,那就是 DotLucene,我想大家可能都听过这个东东吧,那我就讲讲如何来实现多表情况下的全文检索.

1、新建winform项目,把.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, "(.*)");

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));

// 写入索引

parseHtml(dr["Content"].ToString()));

}/info/

}

//关闭索引

public void Close()

{

writer.Optimize();

writer.Close();

}

}

以上就是建立索引的过程,在数据读取的时候最好分披读,比如一次300条,这样效率会比较高.

相关文档
最新文档