lucene告诉进来帮我看看

ycf12345 2009-03-23 12:15:32
大家好,我最近在研究lucene,有一个问题,关于lucene关键字统计的问题,我想知道关键字在一个网页,一个文件,或者是数据库中字段属性里面出现的次数。根据统计,次数越多的的越靠前。进行分页。我在网上查了一些,但是没有这方面的资料。
同时有谁对lucene的文件的读取有问题的可以问我,我们共同学习。我的邮箱是yachaofeng@163.com
...全文
117 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
BeFore27 2009-11-13
  • 打赏
  • 举报
回复
UP
iantle 2009-11-03
  • 打赏
  • 举报
回复
观望中
yangdangdalongqiu 2009-10-11
  • 打赏
  • 举报
回复
路过,顶一下。
springbird 2009-10-11
  • 打赏
  • 举报
回复
路过
withtao 2009-10-10
  • 打赏
  • 举报
回复
lucene的实例资料确实比较少 网上有的都是空洞的东西 不解决实际问题 数据量上了百万就歇菜了
赶明我有空了 写个简单实用的
fffy2366 2009-10-10
  • 打赏
  • 举报
回复
欢迎高手进群讨论
J2EE开发高级群:71929019
withtao 2009-10-10
  • 打赏
  • 举报
回复
给你个比较完整的例子 包括了 速度的优化部分 你自己研究下
原理是 使用分组的列 来排序 然后统计个数

Query query = prequery(type, q);


int sortname = 0;
sortname = (int)(type.Replace("-", "").Length / 2);

//排序 此处只能用一列排序
Sort st = new Sort();
SortField[] sf = new SortField[] {
new SortField("type"+sortname.ToString(),SortField.INT)
};


st.SetSort(sf);


log("type" + sortname.ToString());


DateTime start = DateTime.Now;
DateTime end;


//IndexSearcher _is = new IndexSearcher(path);

//StringBuilder sb = new StringBuilder();


//使用上次之缓存
CachingWrapperFilter filter = new CachingWrapperFilter(new QueryFilter(query));





Dictionary<string, int> dc = new Dictionary<string, int>();


//TopFieldDocs docs = _is.Search(query, null, 100000, st);
TopFieldDocs docs = _is.Search(query, filter, 100000, st);



end = DateTime.Now;
log("1 查出耗时 " + ((TimeSpan)(end - start)).TotalMilliseconds.ToString() + " ms !\r\n");


//docs.scoreDocs数组对应查出的文档,仅包括排序字段的值
for (int i = 0; i < docs.scoreDocs.Length; i++)
{
FieldDoc fieldDoc = (FieldDoc)docs.scoreDocs[i];
//fieldDoc.fields数组对应每个排序字段


for (int j = 0; j < fieldDoc.fields.Length; j++)
{
String sortValue = fieldDoc.fields[j].ToString();

if (dc.ContainsKey(sortValue))
dc[sortValue] += 1;
else
dc[sortValue] = 1;
}

}
end = DateTime.Now;
log("2 遍历统计耗时 " + ((TimeSpan)(end - start)).TotalMilliseconds.ToString() + " ms !\r\n");


DataTable d = new DataTable();

if (dc.Count > 0)
{

List<string> tp = new List<string>();
foreach (string k in dc.Keys)
{
if (k.Trim() != "")
tp.Add("'" + numAddGang(k) + "'");
}

//replace(type,'-','')
com.CommandText = "select name,type from mytype where type in (" + string.Join(",", tp.ToArray()) + ")";
log(com.CommandText);

//Utilities.die(com.CommandText);


d = GenericDataAccess.ExecuteSelectCommand(com);

d.Columns.Add("num", typeof(int));

foreach (DataRow dr in d.Rows)
{
if (dc.ContainsKey(dr["type"].ToString().Replace("-", "")))
dr["num"] = dc[dr["type"].ToString().Replace("-", "")];
}

d.DefaultView.Sort = "num desc";
d = d.DefaultView.ToTable();

}
return d;

zh2208 2009-03-26
  • 打赏
  • 举报
回复
帮顶先,以后有机会可以联系。。

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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