首页 新闻 会员 周边

lucene.net 查询的问题

0
悬赏园豆:100 [已解决问题] 解决于 2010-08-27 10:27

最近在学习lucene.net,跟着网上的例子学着做了一个例子,但是不知道为什么搜索索引的时候hits.length总是0,请帮忙看一下,谢谢

#region 索引条件
public ActionResult ResumeIndexSearch()
{
List
<string> list = new List<string>() {"北京","三年","java"};
for (int i = 0; i < list.Count; i++)
{
IndexSearch(list[i]);
}
return View("ResumeQuickSearch");
}
#endregion

 

#region 搜索索引
public void IndexSearch(String queryString)
{
EntityList list
= new EntityList();
Hits hits
= null;
try
{
IndexSearcher searcher
= new IndexSearcher("d:/index");
queryString
= GetKeyWordsSplitBySpace(queryString, new KTDictSegTokenizer());

QueryParser contentParser
= new QueryParser("content", new KTDictSegAnalyzer());
Query contentQuery
= contentParser.Parse(queryString);

QueryParser cityParser
= new QueryParser("city", new KTDictSegAnalyzer());
Query cityQuery
= contentParser.Parse(queryString);

QueryParser skillParser
= new QueryParser("skill", new KTDictSegAnalyzer());
Query skillQuery
= contentParser.Parse(queryString);

BooleanQuery bquery
= new BooleanQuery();
bquery.Add(contentQuery, BooleanClause.Occur.MUST);
bquery.Add(cityQuery, BooleanClause.Occur.MUST);
bquery.Add(skillQuery, BooleanClause.Occur.MUST);

hits
= searcher.Search(bquery);

System.Web.HttpContext.Current.Response.Write(
"------------hits:" + hits.Length() + "\r\n\\");

ArrayList entities
= new ArrayList();
for (int i = 0; i < hits.Length(); i++)
{
Document doc
= hits.Doc(i);
LuceneEntity entity
= new LuceneEntity();
entity.Id
= doc.Get("id");
entity.Title
= doc.Get("name");
entity.Type
= doc.Get("type");
entity.URL
= doc.Get("url");
entity.Content
= doc.Get("content");
entity.CreateDate
= doc.Get("time");
entities.Add(entity);
System.Web.HttpContext.Current.Response.Write(
"------------content id:" + doc.Get("id") + "\r\n\\");
}
list.Count
= hits.Length();
list.List
= entities;
searcher.Close();
}
catch(Exception e)
{
System.Web.HttpContext.Current.Response.Write(
"----------error:" + e.Message + "---" + e.ToString());
}
}
#endregion

 

Cindy Yao的主页 Cindy Yao | 初学一级 | 园豆:100
提问于:2010-08-26 21:25
< >
分享
最佳答案
0

你这个例子好像是参考我原来写的 KTDictSeg 分词组件自带的例子。你这样做是要求

content city skill 三个字段都要同时满足 queryString 的条件才可以。如果其中一个字段没有满足的记录,
hit就会返回0。而这三个字段我感觉匹配的条件应该不一样吧。
另外KTDictSeg 我已经不维护了,你最好用我做的最新的中文分词盘古分词,它是KTDictSeg 的升级版本,
目前大概有1千多公司在用。项目主页
http://pangusegment.codeplex.com/ download 下有一个为lucene.net 写的例子。
感觉你是在做一个招聘方面的网站,如果你对 Lucene 感觉比较困难,建议你用用HubbleDotNet,这个比Lucene 容易
用,支持SQL 语句的,而且有类似SQL SERVER 查询分析器那样的人机界面,可以在1-2小时内就构建一个全文索引的后台
部分,支持和数据库的联动。你看下面这个网站
http://job.dichan.com/JobSearch.aspx 这是新浪地产的人才招聘搜索,
这个网站就是基于HubbleDotNet 构建的

给你几个链接,你可以参考参考
http://www.cnblogs.com/eaglet/archive/2010/05/13/1734273.html
http://www.cnblogs.com/eaglet/archive/2010/08/25/1808143.html
http://www.cnblogs.com/eaglet/archive/2010/04/07/1706305.html


收获园豆:100
eaglet | 专家六级 |园豆:17139 | 2010-08-27 07:54
谢谢~我去试试用盘古分词做~
Cindy Yao | 园豆:100 (初学一级) | 2010-08-27 10:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册