lucene:lucene学习

  项目描述: 个很简单新闻模块,只涉及到数据库中 s表, 通过提交表单可以往s表中添加数据, 也可以输入关键字搜索s表中数据

  目标:以用户输入为关键字,查找相关新闻帖子(如果帖子标题或标签和关键字相匹配)

  缺点:只支持单关键字,

  数据表:s 字段有 id, title(标题), tags(标签)...

  按照我理解和应用把过程分为:(1)创建索引和(2)搜索应用 两个步骤

  (1)创建索引:

  我思路是每往数据库里添加条记录就把该数据中标题id及tags字段添加到索引记录中以备查询,以下代码在添加新闻类中:

/**往数据库中添加条新闻记录**/
News n= News;
n.Content(content);
n.Title(title);
n.Tags(tags);
DAO.save(n);
/**以下是处理索引代码**/
String indexDir="c:/lucene";//索引文件路径
Directory dir = FSDirectory.getDirectory(indexDir);
IndexReader.unlock(dir);
IndexWriter writer= IndexWriter(indexDir, StandardAnalyzer,false);//是否重建索引?
//注意这里false状态意思可能是不重新建IndexWriter如果为true,IndexWriter会重建索引这样以前索引中已经索引数据将会丢失
/**以下代码将新闻记录加到索引中**/
  
Document doc= Document;
doc.add( Field("sid",String.valueOf(n.getId), Field.Store.YES, Field.Index.NO));
doc.add( Field("title", n.getTitle, Field.Store.YES, Field.Index.TOKENIZED));
doc.add( Field("tags", n.getTags, Field.Store.YES, Field.Index.TOKENIZED));
writer.addDocument(doc);
writer.optimize;//优化索引
writer.close;


  (2)搜索应用:

  (只支持单个关键字,拆分词我还不会用也不知道要注意什么)

  假设用户输入了关键词 "上海" ,我们想把新闻标题(title)及 标签(tags)中包含"上海"新闻都找出来,

  以下是大致思路:不查询数据库而使用前面创建索引,将索引field字段和关键字匹配得到能匹配得上记录列表(Hits)然后把Hits中每个记录(document),放入List中并在页面显示:

/**索引位置搜索类分析器**/
String indexDir = "c:/lucene";
Searcher searcher = IndexSearcher(indexDir);
Analyzer analyzer = StandardAnalyzer;
/**索引中想要查询field**/
String fields = { "title", "tags"};//和索引中"title"和"tags"相关联
String q = { "北京","北京"};//搜索关键字,上面有两个匹配所以这里长度也是两个
/**下面就是查询API吧**/
Query query = MultiFieldQueryParser.parse(q, fields, analyzer);
////我现在知道query有两种构造思路方法用于区别匹配方案中,
//(1.)单关键字-单字段对应TermQuery(这个最简单)
//(2.)单关键字对应多字段查询MultiFieldQueryParser
Hits hits = searcher.search(query); //查询结果,结果个数可用 hits.length来获得
  
List slist= ArrayList;
for ( i = 0; i < hits.length; i) {
  Document doc = hits.doc(i);
  News n= News;
  n.Id(Integer.valueOf(doc.get("sid")));
  n.Tags(doc.get("tags"));
  n.Title(doc.get("title"));
  slist.add(n);
}
request.Attribute("slist",slist)


  然后在页面上就可以显示查到记录了.

  如果你有好思路完成同样功能请告诉我谢谢

Tags:  lucene教程 lucene.net luceneinaction lucene

延伸阅读

最新评论

发表评论