今天用lucene.net做了个简单的站内搜索
发现比数据库用like快了好多倍,用like要15秒
用lucene.net只要0.095秒
本机数据库数据只有10万,通过lucene.net建立索引要56M
不过我建索引是通过手动建的
我想问的是建立索引是自己特定时间建索引,然后当数据更新到一定量的时候在删除索引重新建
还是该怎么建呢?网上找了下没相关资料,倒是怎么建索引讲了好多
希望各位兄弟不要从网上复制给我该怎么建索引的,这个我会了先谢谢大家了
发现比数据库用like快了好多倍,用like要15秒
用lucene.net只要0.095秒
本机数据库数据只有10万,通过lucene.net建立索引要56M
不过我建索引是通过手动建的
我想问的是建立索引是自己特定时间建索引,然后当数据更新到一定量的时候在删除索引重新建
还是该怎么建呢?网上找了下没相关资料,倒是怎么建索引讲了好多
希望各位兄弟不要从网上复制给我该怎么建索引的,这个我会了先谢谢大家了
解决方案 »
- asp.net 如何将FileUpload选中的图片存到sql2005数据库
- 有人碰到过这种问题吗?
- aspx 页面出错!
- 一个关于DropDrowList的简单问题。
- javascript 语句
- ASP.NET中CheckBox的事件响应
- 请问高手:怎么样才能使DIV可以垂直流动???
- 如何获得数据源的SQL数据类型 急
- 关于网页编辑器执行脚本execCommand("JustifyLeft",null,null);要是低于IE5.5这个版本不支持了,如何实现?谢谢!比较急,在线等!
- 请问将01-12-03 10:07PM转变为DateTime的方法?
- 菜单导航怎样设计布局。。。显示在右侧
- 关于移除List指定项的问题
怎么对标题和内容进行搜索呢?还有就是像baidu google一样,
例如搜索童 装中间有个空格,他会把相关信息搜索出来!
我做了下做不出来,搜索0条记录。发现网上例子太少了。求会的帮帮忙!
怎么对标题和内容进行搜索呢?
BooleanQuery
QueryParser qp = new QueryParser("title", new ChineseAnalyzer());
Query query = qp.Parse(keywords);然后改成
BooleanQuery query = new BooleanQuery();
Query query1 = new TermQuery(new Term("title", keywords));
query.Add(query1, BooleanClause.Occur.MUST);
Hits hits = searcher.Search(query);
这样我输入童装搜索结果搜索不出来,网上看了下也有人问到TermQuery不支持中文分词,不知道如何解决。
还有我想对标题和内容进行搜索
是要用多字段MultiFieldQueryParser
还是用多条件QueryParser.Parse?
{
Test();
Lucene.Net.Search.IndexSearcher search = new Lucene.Net.Search.IndexSearcher(@"E:\1\index"); //把刚才建立的索引取出来
Lucene.Net.Search.Query q = Lucene.Net.QueryParsers.QueryParser.Parse("搜索关键字", "intr", new Lucene.Net.Analysis.Standard.StandardAnalyzer());
Lucene.Net.Search.Hits hit = search.Search(q);
lb.Items.Clear(); //lb是我测试程序中的一个 listbox for (int i = 0; i <= hit.Length() - 1; i++)
{
lb.Items.Add(hit.Doc(i).GetField("bookname").StringValue());
}
}
public void Test()
{
Lucene.Net.Analysis.Standard.StandardAnalyzer a = new Lucene.Net.Analysis.Standard.StandardAnalyzer();
IndexWriter iw = new IndexWriter(@"E:\1\index", a, true); //E:\1\index 为索引文件存放地址
string conn = "数据库连接字符串";
using (DataTable dt = SqlHelper.ExecuteDataset(conn, CommandType.Text, "Select top 100 name,Intr from book ").Tables[0])
{
foreach (DataRow dr in dt.Rows)
{
IndexBook(dr["name"].ToString(), dr["intr"].ToString(), iw); // 这是关键
} }
iw.Optimize();
iw.Close(); }
private void IndexBook(string bookname, string bookintr, IndexWriter writer)
{
try
{
Document doc = new Document();
doc.Add(Field.Keyword("bookname", bookname));
doc.Add(Field.Text("intr", bookintr)); writer.AddDocument(doc);
} catch (FileNotFoundException fnfe)
{ }
}