最近在学习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
你这个例子好像是参考我原来写的 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