首页 新闻 会员 周边 捐助

lucene.net站内搜索

0
悬赏园豆:50 [已解决问题] 解决于 2010-08-11 10:56

用lucene.net做了下搜索的
数据有61604条,建索引用了431M
然后从61604条里面搜索童装,搜索出了21791条,用了1.9秒

加了高亮显示是2.0秒左右
(1)由于是第一次做搜索的,不知道这样的时间是快还是慢?

(2)还有想问下这样做值吗?431M占好多空间!

(3)以前由于数据小,建的索引只有三个文件,一个_b3c.cfs,dele什么的,se什么的,共40几M

现在索引文件431M,索引文件变好多个,不是三个了,这个是因为数据大索引文件变多的吗?

以前数据小建索引可以建完,现在建索引数据大每次创建到431M就不在动了,我对比了下数据库,没有全部创建完,这是什么原因呢?

希望高手帮帮忙

蓝丶 sky的主页 蓝丶 sky | 初学一级 | 园豆:6
提问于:2010-08-10 21:05
< >
分享
最佳答案
0

如果是启动后第一次搜索,1.9秒正常,因为.net 有个初始化的过程,如果不是,这个速度太慢了。应该在200ms以内才对。430M 按说也不算太大,lucene 在20G以后才会出现明显问题。索引不下去,会不会和分词有关?你分词用的是什么组件?如果你是独立主机,你可以尝试用 hubbledotnet + 盘古分词来试试,索引大小比lucene 小很多,速度也快很多。

博客园搜索引擎小组:

http://space.cnblogs.com/group/search/

你也可以在这里讨论。

收获园豆:32
eaglet | 专家六级 |园豆:17139 | 2010-08-11 07:37
谢谢您的回答!分词我就用lucene.net自带的Lucene.Net.Analysis.Standard.StandardAnalyzer()这个分词 现在加了高亮显示的,要2.3秒左右了!不知道哪里出了问题,这个和分词有关吗? 我计算时间是在page_load()里用 datetime start = datetime.now; datetime end= datetime.now; string time = (start-end).tostring()这样算出2。3秒的
蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 08:37
@蓝丶 sky: 你的单条记录很可能非常大,问题很可能出在高亮显示上,你可以统计一下单纯高亮显示用时多少。
eaglet | 园豆:17139 (专家六级) | 2010-08-11 08:45
之前还没加高亮的时候是1.9秒,加了高亮后就变2.3秒左右了! 不知道是不是我写的代码有问题!
蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 08:52
public void Search(int pageIndex, string keywords) { analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(); IndexSearcher search = new IndexSearcher(Server.MapPath("index")); //QueryParser qp = new QueryParser("title", new ChineseAnalyzer()); //单字段搜索 QueryParser qp = new MultiFieldQueryParser(new string[] { "title", "content" }, analyzer); //多字段搜索 Query query = qp.Parse(keywords); Sort sort = new Sort(new SortField("ntime", SortField.STRING, true));//true表示降序 Hits hit = search.Search(query, sort); if (hit != null) { DataRow myrow; DataTable mytab = new DataTable(); mytab.Columns.Add("id"); mytab.Columns.Add("title"); mytab.Columns.Add("content"); mytab.Columns.Add("url"); mytab.Columns.Add("ntime"); mytab.Clear(); int count = hit.Length(); int pageSize = 10; if (count > 0) { int pageCount = count / pageSize + (count % pageSize > 0 ? 1 : 0); pageIndex = Math.Min(pageIndex, pageCount); int startPos = Math.Max((pageIndex - 1) * pageSize, 0); int endPos = Math.Min(pageIndex * pageSize - 1, count - 1); for (int i = startPos; i <= endPos; i++) { Document doc = hit.Doc(i); resultTitle = doc.Get("title").ToString(); resultContent = Cut(parseHtml(doc.Get("content").ToString()), 200); highlighter = new Highlighter(new SimpleHTMLFormatter("<font color='red'><b>", "</b></font>"), new QueryScorer(query)); //高亮显示 Lucene.Net.Analysis.TokenStream totitle =
蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 08:54
不好意思,第一次发贴,不知道插入代码那些缩进都没有了 您可以来这里看看 http://home.cnblogs.com/group/topic/41085.html
蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 08:59
@蓝丶 sky: 贴代码没有用的。如果你全文的文本很大,比如一个文本几百k,那么高亮就会比较慢,你用StopWatch 来统计一下单纯的高亮耗时多少。
eaglet | 园豆:17139 (专家六级) | 2010-08-11 09:21
应该不是很大,因为我是先过滤html标签,然后在截取成200个长度在高亮显示的 我计算下时间看多少! 老大!还有个问题就是我建立索引要好久,建到431M就一直上不去了,可是还没建完呢,还有好几千条。这是什么原因呢?还是我要在等等?
蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 10:08
谢谢大侠您的回答!真的受益非浅
蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 10:13
其他回答(4)
0

最近有个项目想用下lucene.net 看到431M不敢用了。。

收获园豆:3
JieLee | 园豆:160 (初学一级) | 2010-08-10 22:14
不过相对速度还是蛮快的,而且一些高亮显示,分词蛮不错的
支持(0) 反对(0) 蓝丶 sky | 园豆:6 (初学一级) | 2010-08-10 22:17
请问下你创建索引是在后台添加数据的时候就自动创建吗
支持(0) 反对(0) JieLee | 园豆:160 (初学一级) | 2010-08-10 22:23
现在是手动创建的
支持(0) 反对(0) 蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 08:40
0

6W数据就要2秒就不正常了,数据库建立索引也要不了这么长时间。

收获园豆:15
Astar | 园豆:40805 (高人七级) | 2010-08-11 09:19
我建立索引要好久喔!不知道什么原因,我不是建立在内存中的!
支持(0) 反对(0) 蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 09:34
我用了这一句IndexWriter indexw = new IndexWriter(Server.MapPath("index"), new ChineseAnalyzer(), true);建立索引的
支持(0) 反对(0) 蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 09:35
我用存储过程分页 然后sql语句用like '%xxx%'这样才0.5秒左右!比lucene.net快好多! 这个是分词的问题还是我代码的问题呢?分词我是用Lucene.Net.Analysis.Standard.StandardAnalyzer()这个来分词的 我的代码在这里 http://home.cnblogs.com/group/topic/41085.html
支持(0) 反对(0) 蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 09:40
@蓝丶 sky:我也没有用过lucene,只是觉得6W数据2秒太慢了,什么都不用,只建立数据库索引也要不了这么长时间,你上面用的like,是会引起全表扫描,但是6W数据是不影响的。可以使用二楼开发的索引程序。
支持(0) 反对(0) Astar | 园豆:40805 (高人七级) | 2010-08-11 09:45
@Astar: 他那个每行数据的数据量特别大,否则6W怎么会430M呢。高亮时要分词,所以很慢。
支持(0) 反对(0) eaglet | 园豆:17139 (专家六级) | 2010-08-11 10:08
对!这个是新闻表里面的内容很多,那可不可以在建立索引的时候把内容的先过滤掉html标签,在截取200个存储,因为搜索的时候也没有显示全部,只显示部分。这样可以吗?
支持(0) 反对(0) 蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 10:12
@蓝丶 sky:但是你要搜索的内容是全部,可以考虑过滤所有HTML标签,只留内容做存储。
支持(0) 反对(0) Astar | 园豆:40805 (高人七级) | 2010-08-11 10:15
谢谢大侠!我试试!还有我想换成你的盘古分词,是只要把原来的分词换成你的那个就行了吗?
支持(0) 反对(0) 蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 10:19
@蓝丶 sky:呵呵,你搞错了,盘古分词是“eaglet”大侠弄的。
支持(0) 反对(0) Astar | 园豆:40805 (高人七级) | 2010-08-11 10:21
呵呵!不好意思!刚看成是eaglet大侠回复的!不过还是谢谢你哈!给我的建议真是太好了!现在正在重新建立索引,估计会小很多!
支持(0) 反对(0) 蓝丶 sky | 园豆:6 (初学一级) | 2010-08-11 10:24
0

我想请教下,为什么我的高亮显示不起作用~~~

金威 | 园豆:50 (初学一级) | 2011-02-20 19:43
0

我的143万条数据量,建索引花了近半小时

然后搜索,时间一般是1.3S但是觉得很慢

think_fish | 园豆:140 (初学一级) | 2011-06-17 16:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册