﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-冰山上的狼-文章分类-Open-Open</title><link>http://www.blogjava.net/gupaladino/category/18721.html</link><description>在努力、磨练、打击下不断地向着理想前进</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 03:18:00 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 03:18:00 GMT</pubDate><ttl>60</ttl><item><title>My第一个搜索模型</title><link>http://www.blogjava.net/gupaladino/articles/90693.html</link><dc:creator>Gu.paladino</dc:creator><author>Gu.paladino</author><pubDate>Fri, 29 Dec 2006 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/gupaladino/articles/90693.html</guid><wfw:comment>http://www.blogjava.net/gupaladino/comments/90693.html</wfw:comment><comments>http://www.blogjava.net/gupaladino/articles/90693.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gupaladino/comments/commentRss/90693.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gupaladino/services/trackbacks/90693.html</trackback:ping><description><![CDATA[
		<p>这几天，我的第一个基于lucene的搜索搞好了，记载一下：<br />首先要有一个包包Jar的那个，可以到官方网站去下载，之后现研究一下这个包包由于现在是学习阶段，就下了两个版本1.4.3的和2.0的，lucene-2.0的留着以后开发用，lucene-1.4.3的学习用，毕竟到2.0 时代文件格式有很大的变化，包括生成的index格式都变化了，所以最好是两个版本都有。在开发的时候导入这两个包就行了，我开始真的不会，汗！我还以为和C++里面的一样呢直接include，现在想起来狂晕，那时候刚开始写Java连声明个类都叫Cjavaclass，MFC的写法，汗自己一个！定义变量还保留C的习惯_javaVar_，再汗一个，现在好多了。<br />步骤一：<br />先写一个定义常量的*.java文件<br />public class Constants {<br /> public final static String INDEX_FILE_PATH = "C:\\Java\\lucene\\DataSource";<br /> public final static String INDEX_STORE_PATH = "C:\\Java\\lucene\\DataIndex";<br />}<br />用来存储要建立索引的文件和存储建好的索引存储在什么地方<br />步骤二：<br />写生成索引的类：<br /> //将要索引的文件构成一个Document对象,并添加一个域"content"<br /> public class LuceneIndex {<br /> //索引器<br /> private IndexWriter writer = null;<br /> // 初始化=====&gt;构造函数<br /> public LuceneIndex() {<br />  try {<br />   writer = new IndexWriter(Constants.INDEX_STORE_PATH,new StandardAnalyzer(), true);<br />  } catch (Exception e) {<br />   e.printStackTrace();<br />  }<br /> }<br /> //将要索引的文件构成一个Document对象,并添加一个域"content"<br /> private Document getDocument(File f) throws Exception {<br />  Document doc = new Document();<br />  FileInputStream is = new FileInputStream(f);<br />  Reader reader = new BufferedReader(new InputStreamReader(is));<br />  doc.add(Field.Text("contents", reader));<br />  doc.add(Field.Keyword("path", f.getAbsolutePath()));<br />  return doc;<br /> }<br /> public void writeToIndex() throws Exception {<br />  File folder = new File(Constants.INDEX_FILE_PATH);<br />  if (folder.isDirectory()) {<br />   String[] files = folder.list();<br />   System.out.println("正在建立索引..........请等待");<br />   for (int i = 0; i &lt; files.length; i++) {<br />    File file = new File(folder, files[i]);<br />    Document doc = getDocument(file);<br />    System.out.println("正在建立文件 : " + file + " 的索引");<br />    System.out.println("完毕");<br />    writer.addDocument(doc);<br />   }<br />  }<br /> }<br /> public void close() throws Exception {<br />  writer.close();<br /> }<br /> //测试用的主程序<br /> public static void main(String[] agrs) throws Exception {<br />  // 声明一个LuceneIndex对象<br />  LuceneIndex indexer = new LuceneIndex();<br />  // 建立索引<br />  Date start = new Date();<br />  indexer.writeToIndex();<br />  Date end = new Date();<br />  System.out.println("建立索引完毕..........Thank you for Lucene");<br />  System.out.println("");<br />  System.out.println("消耗时间 " + (end.getTime() - start.getTime())<br />    + " 毫秒");<br />  System.out.println("索引建立完毕");<br />  indexer.close();<br /> }<br />}<br />现在索引生成了，是这些文本的的全文索引用的索引文件<br />步骤三：<br />现在基础都有了，要的就是搜索的累了，干嘛？写个搜索类就是用来查询啊！<br />public class LuceneSearch {<br /> // 声明一个IndexSearcher对象<br /> private IndexSearcher searcher = null;<br /> // 声明一个Query对象<br /> private Query query = null;<br /> // 初始化构造函数<br /> public LuceneSearch() {<br />  try {<br />   searcher = new IndexSearcher(IndexReader.open(Constants.INDEX_STORE_PATH));<br />  } catch (Exception e) {<br />   e.printStackTrace();<br />  }<br /> }<br /> public final Hits search(String keyword) {<br />  System.out.println("正在检索关键字 : " + keyword);<br />  // System.out.println(keyword);<br />  try {<br />   query = QueryParser.parse(keyword, "contents",<br />     new StandardAnalyzer());<br />   System.out.println(query);<br />   Date start = new Date();<br />   Hits hits = searcher.search(query);<br />   Date end = new Date();<br />   System.out.println("检索完成......." + " 用时 "+ (end.getTime() - start.getTime()) + " 毫秒");<br />   System.out.println(" ");<br />   return hits;<br />  } catch (Exception e) {<br />   e.printStackTrace();<br />   return null;<br />  }<br /> }</p>
		<p> public void printResult(Hits h) {<br />  if (h.length() == 0) {<br />   System.out.println(h);<br />   System.out.println(h.length());<br />   System.out.println("对不起,没有找到您需要的结果");<br />  } else {<br />   for (int i = 0; i &lt; h.length(); i++) {<br />    try {<br />     Document doc = h.doc(i);<br />     System.out.print("这是第 " + i + "个检索结果,文件名为: ");<br />     System.out.println(doc.get("path"));<br />    } catch (Exception e) {<br />     e.printStackTrace();<br />    }<br />   }<br />  }<br />  System.out.println(" ");<br />  System.out.println("----------------------------------");<br />  System.out.println(" ");<br /> }<br /> <br /> public static void main(String[] args) throws Exception {<br />  LuceneSearch test = new LuceneSearch();<br />  Hits myHits1 = test.search("足球");<br />  Hits myHits2 = test.search("世界杯");<br />  test.printResult(myHits1);<br />  test.printResult(myHits2);<br /> }<br />}<br />步骤四：<br />运行LuceneIndex.java=====&gt; 生成索引<br />运行LuceneSearch.java====&gt;查询关键字<br />ok，this is my first searcher!<br />Although this is very simple,it let me begin with luceneSearcher.Thanks lucene,Tanks Search!<br />Keep on studying knowledge of lucene and search,also and artificial intelligence!<br />I love this job!</p>
<img src ="http://www.blogjava.net/gupaladino/aggbug/90693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gupaladino/" target="_blank">Gu.paladino</a> 2006-12-29 11:49 <a href="http://www.blogjava.net/gupaladino/articles/90693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>