百万数据查询及优化!

li_dao_hang_1989 2010-05-04 11:39:15
我现在有个想法就是用lucene.net进行搜索,首页生成索引文件,查询的时候根据索引文件进行查询,避免直接查询数据库!不知道这种做法可不可取!请高手多多指教……
...全文
387 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsbsoft 2011-08-10
  • 打赏
  • 举报
回复
我也在研究这个...
SAGEM_M 2010-05-04
  • 打赏
  • 举报
回复
zhuxiaojun2002 2010-05-04
  • 打赏
  • 举报
回复
http://search.8844.com/default.aspx?keyword=%e8%b6%8b%e5%8a%bf%e6%9d%80%e6%af%92&sort=zhidao

这个是我以前做的,“知道”也是百万级的。用的lucene.net,速度还行。没人维护了。
zhuxiaojun2002 2010-05-04
  • 打赏
  • 举报
回复
可取,只是实时性差点。
我也用lucene.net做了些东西,有问题交流
  • 打赏
  • 举报
回复
我假设你知道“lucene.net生成的索引跟数据库生成的索引是两回事”,所以我并没有问这个问题。但是你的问题看起来跟这个相关,不要“藏着掖着”似地问问题,说清楚你原先的设计,别人才能回答你的问题。
  • 打赏
  • 举报
回复
不懂你的意思。

“首页生成索引文件”这里的“首页”是什么意思呢?索引的对象是什么?索引的结构内涵是什么?

查询索引文件怎么就是不查询数据库了呢?或者说查询了索引文件不是为了快速找到数据库中的记录的id么,怎么变成索引代替数据库这个说法了呢?
asharpnet 2010-05-04
  • 打赏
  • 举报
回复
索引
缓存
zhulong1111 2010-05-04
  • 打赏
  • 举报
回复
建立索引
bancxc 2010-05-04
  • 打赏
  • 举报
回复
加索引
硬件
软件
sxiaohui8709253 2010-05-04
  • 打赏
  • 举报
回复
不懂帮顶 可以去SQL板块提问
wuyq11 2010-05-04
  • 打赏
  • 举报
回复
根据查询优化索引
考虑建分区表
SQL语句如何
nosuchtracter 2010-05-04
  • 打赏
  • 举报
回复
百万级别的数据算小了
索引建好点就可以了,加下缓存
你又不是对全文进行搜索
tashiwoweiyi 2010-05-04
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
liangyongqi_1982 2010-05-04
  • 打赏
  • 举报
回复
我用lucence写过全文检索,你可以把要查询的字段放在索引文件中,内容较大的话可以转换为二进制流,然后存在索引文件中,第一次建立索引文件时时间可能会长一些,但是建完之后实时的更新索引文件,速度就很快了,速度比直接从数据库中筛选要快很多,更新的话你可以选择在查询的时候同时更新索引文件,也可以定时更新,或者自己手动更新,至于1000条死机的问题应该不可能,而且你也可以分着建立索引,相当于多个索引库,这样可能会更好一些。
liuyj1979 2010-05-04
  • 打赏
  • 举报
回复
百万级的数据查询,如果一次不返回很大量的数据的话,应该也不慢的。
要返回大批量数据的时候考虑数据分页。
如果数据实在大了还可以考虑做数据分区,类似oralce的表空间那样,将大表分成多个数据文件存储。
li_dao_hang_1989 2010-05-04
  • 打赏
  • 举报
回复
顶*&&……
zhuxiaojun2002 2010-05-04
  • 打赏
  • 举报
回复
和你写的基本上相同,没你说的问题。你查查了。
zhuxiaojun2002 2010-05-04
  • 打赏
  • 举报
回复
public Document GetDocument(DataRow dr)
{
Document doc = new Document();
doc.Add(new Field("id", dr["WebsiteProductID"].ToString(), Field.Store.YES, Field.Index.TOKENIZED));
doc.Add(new Field("ProductID", dr["ProductID"].ToString(), Field.Store.YES, Field.Index.TOKENIZED));
doc.Add(new Field("WebsiteID", dr["WebsiteID"].ToString(), Field.Store.YES, Field.Index.TOKENIZED));
doc.Add(new Field("itext", Splits(dr["ProductName"].ToString()), Field.Store.NO, Field.Index.TOKENIZED));
doc.Add(new Field("tmp1", dr["tmp1"].ToString(), Field.Store.NO, Field.Index.TOKENIZED));
doc.Add(new Field("tmp2", dr["tmp2"].ToString(), Field.Store.NO, Field.Index.TOKENIZED));
return doc;
}



private bool IndexFile(int PageSize, int PageIndex, string path)
{
bool IsContinue;
bool retValue = true;
string spath = string.Empty;
try
{
DataTable dt = iop.GetDataInfoPage(PageSize, PageIndex, out IsContinue);
if (dt.Rows.Count > 0)
{
IndexWriter writer = new IndexWriter(path, new WhitespaceAnalyzer(), PageIndex == 1 ? true : false);
Document[] doc = new Document[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
doc[i] = new Document();
doc[i] = iop.GetDocument(dt.Rows[i]);
writer.AddDocument(doc[i]);
}
writer.Optimize();
writer.Close();
}
Thread.Sleep(1000);
if (IsContinue)
IndexFile(PageSize, PageIndex + 1, path);
}
catch (Exception ex)
{
iop.WriteLogFile("IndexFile,时间:" + DateTime.Now.ToString() + "Message:" + ex.Message + "path:" + spath);
retValue = false;
}
return retValue;
}
zhuxiaojun2002 2010-05-04
  • 打赏
  • 举报
回复
我不知道是不是你的content字段太大,还是什么,感觉不应该啊。你检查下程序是不是在跑,你top 10 看看。

还有我以前做的不索引content的,只索引title,tag,keyword。感觉写索引很快啊。半个小时左右。
li_dao_hang_1989 2010-05-04
  • 打赏
  • 举报
回复
顶顶¥%
加载更多回复(5)

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧