﻿<?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-&lt;h1&gt;&lt;font color="red" size="36"&gt;︻┳═一Java&lt;/font&gt;&lt;/h1&gt;-文章分类-Lucene</title><link>http://www.blogjava.net/rain1102/category/19556.html</link><description>&lt;b&gt;&lt;font color="#3C1435"&gt;08年奋斗目标：&lt;/font&gt;&lt;font color="red"&gt;买个房子！&lt;/font&gt;&lt;/b&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 22 Feb 2008 00:23:15 GMT</lastBuildDate><pubDate>Fri, 22 Feb 2008 00:23:15 GMT</pubDate><ttl>60</ttl><item><title>利用Hibernate Search全文检索你的领域模型</title><link>http://www.blogjava.net/rain1102/articles/180470.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 18 Feb 2008 07:16:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/180470.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/180470.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/180470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/180470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/180470.html</trackback:ping><description><![CDATA[<p>Hibernate Search项目的Beta第二版刚刚发布。InfoQ为此采访了Hibernate Search项目的发起人Emmanuel Bernard以了解更多细节，Emmanuel同时也是相关项目Hibernate Annotations和Hibernate EntityManager的发起人。根据Emmanuel所言，Hibernate Search目的是帮助Hibernate的使用者或是Java Persistence API（JPA）的使用者可以通过全文搜索索引来访问Hibernate或JPA管理的对象。Hibernate Search项目的主要特性包含以下几个方面：</p>
<p>Lucene集成——作为强大高效的检索引擎，Lucene的美名早已久经考验了； <br />
数据的自动插入和更新——当一个对象通过Hibernate添加或更新时，索引也会相应进行透明的更新； <br />
支持众多复杂的搜索方式——可快速的使用通配符进行搜索，以及多关键词全文检索（multi-word text searches）和近似或同义词搜索（approximation/synonym searches），或根据相关性排列搜索结果； <br />
搜索集群（Search Clustering）——Hibernate Search提供了内建搜索集群解决方案，其中包括一个基于JMS的异步查询和索引系统； <br />
对Lucene API接口的直接调用——如果用户打算处理某些特别复杂的问题，可以在查询中直接使用Lucene提供的API接口； <br />
对Lucene的自动管理——Hibernate Search可以管理并优化Lucene的索引，并且非常高效地使用Lucene的API接口。 <br />
项目的主要目标包含以下几个方面：</p>
<p>易用性——和Hibernate的ORM映射一样，Hibernate Search帮助用户实现了业务90%的工作，并且使用户专注于余下更为困难的业务实现部分； <br />
和已有的Hibernate/JPA编程模型保持一致性——更轻松地集成Hibernate/JPA编程模型是&#8220;一开始就致力要实现的目标&#8221;。</p><img src ="http://www.blogjava.net/rain1102/aggbug/180470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-02-18 15:16 <a href="http://www.blogjava.net/rain1102/articles/180470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene全文检索小试</title><link>http://www.blogjava.net/rain1102/articles/96436.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 29 Jan 2007 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/96436.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/96436.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/96436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/96436.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/96436.html</trackback:ping><description><![CDATA[<p>
				<strong>
						<font color="#006400">HTML 解析器</font>
				</strong>
				<br />
				<strong>
						<font color="#000000">package com.rain.util;</font>
				</strong>
		</p>
		<p>
				<strong>
						<font color="#000000">import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.FileInputStream;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.FileNotFoundException;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.IOException;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.InputStream;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.InputStreamReader;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.Reader;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.UnsupportedEncodingException;</font>
				</strong>
		</p>
		<p>
				<strong>
						<font color="#000000">import org.apache.lucene.demo.html.HTMLParser;</font>
				</strong>
		</p>
		<p>
				<strong>
						<font color="#000000">public class HTMLDocParser {</font>
				</strong>
		</p>
		<p>
				<font color="#000000">
						<strong> private String htmlPath;<br /> private HTMLParser htmlParser;<br /> <br /> public HTMLDocParser(String htmlPath){<br />  this.htmlPath=htmlPath;<br />  initHtmlParser();<br /> }<br /> public void initHtmlParser(){<br />  InputStream inputStream=null;<br />  try{<br />   inputStream=new FileInputStream(htmlPath);<br />  }catch(FileNotFoundException e){<br />   e.printStackTrace();<br />  }<br />  if(null!=inputStream){<br />   try{<br />    htmlParser=new HTMLParser(new InputStreamReader(inputStream,"utf-8"));<br />   }catch(UnsupportedEncodingException e){<br />    e.printStackTrace();<br />   }<br />  }<br /> }<br /> public String getTitle(){<br />  if(null!=htmlParser){<br />   try{<br />    return htmlParser.getTitle();<br />   }catch(IOException e){<br />    e.printStackTrace();<br />   }catch(InterruptedException e){<br />    e.printStackTrace();<br />   }<br />  }<br />  return "";<br /> }<br /> public Reader getContent(){<br />  if(null!=htmlParser){<br />   try{<br />    return htmlParser.getReader();<br />   }catch(IOException e){<br />    e.printStackTrace();<br />   }<br />  }<br />  return null;<br /> }<br /> public String getPath(){<br />  return this.htmlPath;<br /> }<br />}<br /></strong>
				</font>
		</p>
		<p>
		</p>
		<hr />
		<p>
		</p>
		<p>
				<font style="BACKGROUND-COLOR: #ffffff" color="#006400">描述搜索结果的结构实体Bean<br /><font color="#000000">package com.rain.search;</font></font>
		</p>
		<p>
				<font style="BACKGROUND-COLOR: #ffffff" color="#000000">public class SearchResultBean {<br />    private String htmlPath;<br />    <br />    private String htmlTitle;</font>
		</p>
		<p>
				<font style="BACKGROUND-COLOR: #ffffff" color="#000000"> public String getHtmlPath() {<br />  return htmlPath;<br /> }</font>
		</p>
		<p>
				<font style="BACKGROUND-COLOR: #ffffff" color="#000000"> public void setHtmlPath(String htmlPath) {<br />  this.htmlPath = htmlPath;<br /> }</font>
		</p>
		<p>
				<font style="BACKGROUND-COLOR: #ffffff" color="#000000"> public String getHtmlTitle() {<br />  return htmlTitle;<br /> }</font>
		</p>
		<p>
				<font style="BACKGROUND-COLOR: #ffffff" color="#006400">
						<font color="#000000"> public void setHtmlTitle(String htmlTitle) {<br />  this.htmlTitle = htmlTitle;<br /> }<br />}</font>
						<br />
				</font>
		</p>
		<p>
		</p>
		<hr />
		<p>
		</p>
		<p>
				<font color="#000000">
						<font color="#006400">索引子系统的实现</font>
						<br />
						<br />package com.rain.index;</font>
		</p>
		<p>
				<font color="#000000">import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.File;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.IOException;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.Reader;</font>
		</p>
		<p>
				<font color="#000000">import org.apache.lucene.analysis.Analyzer;<br />import org.apache.lucene.analysis.standard.StandardAnalyzer;<br />import org.apache.lucene.document.Document;<br />import org.apache.lucene.index.IndexWriter;<br />import org.apache.lucene.store.Directory;<br />import org.apache.lucene.store.FSDirectory;<br />import org.apache.lucene.document.Field;</font>
		</p>
		<p>
				<font color="#000000">import com.rain.util.HTMLDocParser;</font>
		</p>
		<p>
				<font color="#000000">public class IndexManager {<br /> <br /> //the directory that stores HTML files<br /> private final String dataDir="E:\\dataDir";<br /> <br /> //the directory that is used to store a Lucene index<br /> private final String indexDir="E:\\indexDir";<br /> <br /> public boolean creatIndex()throws IOException{<br />  if(true==inIndexExist()){<br />   return true;<br />  }<br />  File dir=new File(dataDir);<br />  if(!dir.exists()){<br />   return false;<br />  }<br />  File[] htmls=dir.listFiles();<br />  Directory fsDirectory=FSDirectory.getDirectory(indexDir,true);<br />  Analyzer analyzer=new StandardAnalyzer();<br />  IndexWriter indexWriter=new IndexWriter(fsDirectory,analyzer,true);<br />  for(int i=0;i&lt;htmls.length;i++){<br />   String htmlPath=htmls[i].getAbsolutePath();<br />   if(htmlPath.endsWith(".html")||htmlPath.endsWith("htm")){<br />    addDocument(htmlPath,indexWriter);<br />   }<br />  }<br />  indexWriter.optimize();<br />  indexWriter.close();<br />  return true;<br /> }<br /> <br /> public void addDocument(String htmlPath,IndexWriter indexWriter){<br />  HTMLDocParser htmlParser=new HTMLDocParser(htmlPath);<br />  String path=htmlParser.getPath();<br />  String title=htmlParser.getTitle();<br />  Reader content=htmlParser.getContent();<br />  <br />  Document document=new Document();<br />  document.add(new Field("path",path,Field.Store.YES,Field.Index.NO));<br />  document.add(new Field("title",title,Field.Store.YES,Field.Index.TOKENIZED));<br />     document.add(new Field("content",content));<br />     try{<br />      indexWriter.addDocument(document);<br />     }catch(IOException e){<br />      e.printStackTrace();<br />     }<br /> }<br /> public String getDataDir(){<br />  return this.dataDir;<br /> }<br /> <br /> public String getIndexDir(){<br />  return this.indexDir;<br /> }<br /> <br /> public boolean inIndexExist(){<br />  File directory=new File(indexDir);<br />  if(0&lt;directory.listFiles().length){<br />   return true;<br />  }else{<br />   return false;<br />  }<br /> }<br />}<br /></font>
		</p>
		<p>
		</p>
		<hr />
		<p>
		</p>
		<p>搜索功能的实现<br /><font color="#000000">package com.rain.search;</font></p>
		<p>
				<font color="#000000">import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.IOException;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.ArrayList;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.List;</font>
		</p>
		<p>
				<font color="#000000">import org.apache.lucene.analysis.Analyzer;<br />import org.apache.lucene.analysis.standard.StandardAnalyzer;<br />import org.apache.lucene.queryParser.ParseException;<br />import org.apache.lucene.queryParser.QueryParser;<br />import org.apache.lucene.search.Hits;<br />import org.apache.lucene.search.IndexSearcher;<br />import org.apache.lucene.search.Query;</font>
		</p>
		<p>
				<font color="#000000">import com.rain.index.IndexManager;</font>
		</p>
		<p>
				<font color="#000000">public class SearchManager {<br /> private String searchWord;<br /> private IndexManager indexManager;<br /> private Analyzer analyzer;<br /> <br /> public SearchManager(String searchWord){<br />  this.searchWord=searchWord;<br />  this.indexManager=new IndexManager();<br />  this.analyzer=new StandardAnalyzer();<br /> }<br /> <br /> /**<br />     * do search<br />     */<br /> public List search(){<br />  List searchResult=new ArrayList();<br />  if(false==indexManager.inIndexExist()){<br />   try{<br />    if(false==indexManager.creatIndex()){<br />     return searchResult;<br />    }<br />   }catch(IOException e){<br />    e.printStackTrace();<br />    return searchResult;<br />   }<br />  }<br />  IndexSearcher indexSearcher=null;<br />  try{<br />   indexSearcher=new IndexSearcher(indexManager.getIndexDir());<br />  }catch(IOException e){<br />   e.printStackTrace();<br />  }<br />  QueryParser queryParser=new QueryParser("content",analyzer);<br />  Query query=null;<br />  try{<br />   query=queryParser.parse(searchWord);<br />  }catch(ParseException e){<br />   e.printStackTrace();<br />  }<br />  if(null!=query&amp;&amp;null!=indexSearcher){<br />   try{<br />    Hits hits=indexSearcher.search(query);<br />    for(int i=0;i&lt;hits.length();i++){<br />     SearchResultBean resultBean=new SearchResultBean();<br />     resultBean.setHtmlPath(hits.doc(i).get("path"));<br />     resultBean.setHtmlTitle(hits.doc(i).get("title"));<br />     searchResult.add(resultBean);<br />    }<br />   }catch(IOException e){<br />    e.printStackTrace();<br />   }<br />  }<br />   return searchResult;<br /> }</font>
		</p>
		<p>
				<font color="#000000">}<br /><p></p><hr /></font>
		</p>
		<p>
				<font color="#006400">请求管理器的实现</font>
				<br />
				<br />
				<font color="#000000">package com.rain.servlet;</font>
		</p>
		<p>
				<font color="#000000">import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.IOException;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.List;</font>
		</p>
		<p>
				<font color="#000000">import javax.servlet.RequestDispatcher;<br />import javax.servlet.ServletException;<br />import javax.servlet.http.HttpServlet;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</font>
		</p>
		<p>
				<font color="#000000">import com.rain.search.SearchManager;</font>
		</p>
		<p>
				<font color="#000000">/**<br /> * @author zhourui<br /> * 2007-1-28<br /> */<br />public class SearchController extends HttpServlet {<br /> private static final long serialVersionUID=1L;<br /> <br /> /* (non-Javadoc)<br />  * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)<br />  */<br /> @Override<br /> protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {<br />  // TODO Auto-generated method stub<br />  String searchWord=arg0.getParameter("searchWord");<br />  SearchManager searchManager=new SearchManager(searchWord);<br />  List searchResult=null;<br />  searchResult=searchManager.search();<br />  RequestDispatcher dispatcher=arg0.getRequestDispatcher("search.jsp");<br />  arg0.setAttribute("searchResult",searchResult);<br />        dispatcher.forward(arg0, arg1);<br /> }<br /> <br />}</font>
				<br />
				<br />
		</p>
		<hr />
		<br />
		<strong>向Web服务器提交搜索请求</strong>
		<br />
		<strong>&lt;form action="SearchController" method="post"&gt;<br />      &lt;table&gt;<br />        &lt;tr&gt;<br />          &lt;td colspan="3"&gt;<br />            SearchWord:&lt;input type="text" name="searchWord" id="searchWord" size="40"&gt;<br />            &lt;input id="doSearch" type="submit" value="search"&gt;<br />          &lt;/td&gt;<br />        &lt;/tr&gt;<br />      &lt;/table&gt;<br />    &lt;/form&gt;<br />显示搜索结果<br /> &lt;table class="result"&gt;<br />      &lt;%<br />        List searchResult=(List)request.getAttribute("searchResult");<br />        int resultCount=0;<br />        if(null!=searchResult){<br />         resultCount=searchResult.size();<br />        }<br />        for(int i=0;i&lt;resultCount;i++){<br />         SearchResultBean resultBean=(SearchResultBean)searchResult.get(i);<br />         String title=resultBean.getHtmlTitle();<br />         String path=resultBean.getHtmlPath();<br />         %&gt;<br />         &lt;tr&gt;<br />           &lt;td class="title"&gt;&lt;h3&gt;&lt;a href="&lt;%=path%&gt;"&gt;&lt;%=title%&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/td&gt;<br />         &lt;/tr&gt;<br />         &lt;%<br />        }<br />      %&gt;<br />    &lt;/table&gt;</strong><img src ="http://www.blogjava.net/rain1102/aggbug/96436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-29 09:57 <a href="http://www.blogjava.net/rain1102/articles/96436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene基本使用介绍(转载自blogjava.net)</title><link>http://www.blogjava.net/rain1102/articles/96356.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sun, 28 Jan 2007 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/96356.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/96356.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/96356.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/96356.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/96356.html</trackback:ping><description><![CDATA[<p>一.  概述</p>
		<p>随着系统信息的越来越多，怎么样从这些信息海洋中捞起自己想要的那一根针就变得非常重要了，全文检索是通常用于解决此类问题的方案，而Lucene则为实现全文检索的工具，任何应用都可通过嵌入它来实现全文检索。</p>
		<p>二.  环境搭建</p>
		<p>从lucene.apache.org上下载最新版本的lucene.jar，将此jar作为项目的build path，那么在项目中就可以直接使用lucene了。</p>
		<p>三.  使用说明</p>
		<p>3.1.       基本概念</p>
		<p>这里介绍的主要为在使用中经常碰到一些概念，以大家都比较熟悉的数据库来进行类比的讲解，使用Lucene进行全文检索的过程有点类似数据库的这个过程，table---à查询相应的字段或查询条件----à返回相应的记录，首先是IndexWriter，通过它建立相应的索引表，相当于数据库中的table，在构建此索引表时需指定的为该索引表采用何种方式进行构建，也就是说对于其中的记录的字段以什么方式来进行格式的划分，这个在Lucene中称为Analyzer，Lucene提供了几种环境下使用的Analyzer：SimpleAnalyzer、StandardAnalyzer、GermanAnalyzer等，其中StandardAnalyzer是经常使用的，因为它提供了对于中文的支持，在表建好后我们就需要往里面插入用于索引的记录，在Lucene中这个称为Document，有点类似数据库中table的一行记录，记录中的字段的添加方法，在Lucene中称为Field，这个和数据库中基本一样，对于Field Lucene分为可被索引的，可切分的，不可被切分的，不可被索引的几种组合类型，通过这几个元素基本上就可以建立起索引了。在查询时经常碰到的为另外几个概念，首先是Query，Lucene提供了几种经常可以用到的Query：TermQuery、MultiTermQuery、BooleanQuery、WildcardQuery、PhraseQuery、PrefixQuery、PhrasePrefixQuery、FuzzyQuery、RangeQuery、SpanQuery，Query其实也就是指对于需要查询的字段采用什么样的方式进行查询，如模糊查询、语义查询、短语查询、范围查询、组合查询等，还有就是QueryParser，QueryParser可用于创建不同的Query，还有一个MultiFieldQueryParser支持对于多个字段进行同一关键字的查询，IndexSearcher概念指的为需要对何目录下的索引文件进行何种方式的分析的查询，有点象对数据库的哪种索引表进行查询并按一定方式进行记录中字段的分解查询的概念，通过IndexSearcher以及Query即可查询出需要的结果，Lucene返回的为Hits.通过遍历Hits可获取返回的结果的Document，通过Document则可获取Field中的相关信息了。<br /></p>
		<p>比较一下Lucene和数据库：</p>
		<p>
		</p>
		<table width="100%" border="1">
				<tbody>
						<tr>
								<td align="middle" width="50%">Lucene</td>
								<td align="middle" width="50%">数据库</td>
						</tr>
						<tr>
								<td width="50%">
										<pre>索引数据源：doc(field1,field2...) doc(field1,field2...)<br />                  \  indexer /<br />                 _____________<br />                | Lucene Index|<br />                --------------<br />                 / searcher \<br /> 结果输出：Hits(doc(field1,field2) doc(field1...))</pre>
								</td>
								<td width="50%">
										<pre> 索引数据源：record(field1,field2...) record(field1..)<br />              \  SQL: insert/<br />               _____________<br />              | DB  Index   |<br />               -------------<br />              / SQL: select \<br />结果输出：results(record(field1,field2..) record(field1...))</pre>
								</td>
						</tr>
						<tr>
								<td width="50%">Document：一个需要进行索引的“单元”<br />一个Document由多个字段组成</td>
								<td width="50%">Record：记录，包含多个字段</td>
						</tr>
						<tr>
								<td width="50%">Field：字段</td>
								<td width="50%">Field：字段</td>
						</tr>
						<tr>
								<td width="50%">Hits：查询结果集，由匹配的Document组成</td>
								<td width="50%">RecordSet：查询结果集，由多个Record组成</td>
						</tr>
				</tbody>
		</table>
		<br />通过对于上面在建立索引和全文检索的基本概念的介绍希望能让你对Lucene建立一定的了解。<br /><p>需要熟悉几个接口：<br /><font color="#006400">分析器Analyzer</font><span class="oblog_text"><br />        分析器主要工作是筛选，一段文档进来以后，经过它，出去的时候只剩下那些有用的部分，其他则剔除。而这个分析器也可以自己根据需要而编写。<br />        org.apache.lucene.analysis.Analyzer：这是一个虚构类，以下两个借口均继承它而来。</span><span class="oblog_text"><br />        org.apache.lucene.analysis.SimpleAnalyzer：分析器，支持最简单拉丁语言。<br /></span><span class="oblog_text">        org.apache.lucene.analysis.standard.StandardAnalyzer：标准分析器，除了拉丁语言还支持亚洲语言，并在一些匹配功能上进行完善。在这个接口中还有一个很重要的构造函数：StandardAnalyzer(String[] stopWords)，可以对分析器定义一些使用词语，这不仅可以免除检索一些无用信息，而且还可以在检索中定义禁止的政治性、非法性的检索关键词。</span><br /><font color="#006400">IndexWriter</font><span class="oblog_text"><br />        IndexWriter的构造函数有三种接口，针对目录Directory、文件File、文件路径String三种情况。<br />例如IndexWriter(String path, Analyzer a, boolean create)，path为文件路径，a为分析器，create标志是否重建索引（true：建立或者覆盖已存在的索引，false：扩展已存在的索引。）<br />       一些重要的方法：</span></p><p></p><table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" cellspacing="0" cellpadding="0" border="1"><tbody><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">接口名<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 243pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt" valign="top" width="324"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">备注<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">addDocument(Document doc)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 243pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="324"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">索引添加一个文档<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">addIndexes(Directory[] dirs)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 243pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="324"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">将目录中已存在索引添加到这个索引<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">addIndexes(IndexReader[] readers)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 243pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="324"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">将提供的索引添加到这个索引<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">optimize()<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 243pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="324"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">合并索引并优化<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">close()<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 243pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="324"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">关闭<o:p></o:p></span></p></td></tr></tbody></table><span class="oblog_text">　<br />       IndexWriter为了减少大量的io维护操作，在每得到一定量的索引后建立新的小索引文件（笔者测试索引批量的最小单位为10），然后再定期将它们整合到一个索引文件中，因此在索引结束时必须进行wirter.optimize()，以便将所有索引合并优化。<br /></span><font color="#006400">org.apache.lucene.document</font><span class="oblog_text"><br /> 以下介绍两种主要的类：<br /> a）org.apache.lucene.document.Document：<br />        Document文档类似数据库中的一条记录，可以由好几个字段（Field）组成，并且字段可以套用不同的类型（详细见b）。Document的几种接口： </span><p></p><table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" cellspacing="0" cellpadding="0" border="1"><tbody><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">接口名<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 243pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt" valign="top" width="324"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">备注<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">add(Field field)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 243pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="324"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">添加一个字段（Field）到Document中<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">String get(String name)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 243pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="324"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 5.25pt; mso-char-indent-count: .5; mso-char-indent-size: 10.5pt"><span class="oblog_text">从文档中获得一个字段对应的文本<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">Field getField(String name)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 243pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="324"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">由字段名获得字段值<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">Field[] getFields(String name)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 243pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="324"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">由字段名获得字段值的集<o:p></o:p></span></p></td></tr></tbody></table><span class="oblog_text"><br /> b）org.apache.lucene.document.Field<br />        即上文所说的“字段”，它是Document的片段section。<br />        Field的构造函数：<br />       Field(String name, String string, boolean store, boolean index, boolean token)。<br />        Indexed：如果字段是Indexed的，表示这个字段是可检索的。<br />        Stored：如果字段是Stored的，表示这个字段的值可以从检索结果中得到。<br />        Tokenized：如果一个字段是Tokenized的，表示它是有经过Analyzer转变后成为一个tokens序列，在这个转变过程tokenization中，Analyzer提取出需要进行索引的文本，而剔除一些冗余的词句（例如：a，the,they等，详见org.apache.lucene.analysis.StopAnalyzer.ENGLISH_STOP_WORDS和org.apache.lucene.analysis.standard.StandardAnalyzer(String[] stopWords)的API）。Token是索引时候的基本单元，代表一个被索引的词，例如一个英文单词，或者一个汉字。因此，所有包含中文的文本都必须是Tokenized的。<br />     Field的几种接口：</span><p></p><table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-table-layout-alt: fixed" cellspacing="0" cellpadding="0" border="1"><tbody><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">Name<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt" valign="top" width="60"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: -0.15pt"><span class="oblog_text">Stored<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 43.95pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt" valign="top" width="59"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: -6.4pt; mso-char-indent-count: -.61; mso-char-indent-size: 10.45pt"><span class="oblog_text">Indexed<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 64.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt" valign="top" width="85"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0.05pt"><span class="oblog_text">Tokenized<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 108pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt" valign="top" width="144"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">use<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">Keyword(String name,<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">        String value)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="60"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">Y<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 43.95pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="59"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">Y<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 64.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="85"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">N<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 108pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="144"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">date,url<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">Text(String name, Reader value)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="60"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">N<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 43.95pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="59"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">Y<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 64.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="85"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">Y<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 108pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="144"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">short text fields:<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">title,subject<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">Text(String name, String value)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="60"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">Y<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 43.95pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="59"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">Y<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 64.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="85"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">Y<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 108pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="144"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">longer text fields,<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">like “body”<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">UnIndexed(String name,<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 52.5pt; mso-char-indent-count: 5.0; mso-char-indent-size: 10.5pt"><span class="oblog_text">String value)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="60"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">Y<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 43.95pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="59"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">N<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 64.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="85"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">N<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 108pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="144"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text"> <o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 167.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="223"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">UnStored(String name,<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">         String value)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="60"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">N<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 43.95pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="59"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">Y<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 64.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="85"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span class="oblog_text">Y<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 108pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="144"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text"> <o:p></o:p></span></p></td></tr></tbody></table><font color="#006400">Hits与Searcher</font><span class="oblog_text"><br />       Hits的主要使用接口：</span><p></p><table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" cellspacing="0" cellpadding="0" border="1"><tbody><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 86.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent" valign="top" width="115"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">接口名<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 324pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt" valign="top" width="432"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">备注<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 86.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="115"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">Doc(int n)<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 324pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="432"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">返回第n个的文档的所有字段<o:p></o:p></span></p></td></tr><tr><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 86.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .5pt" valign="top" width="115"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">length()<o:p></o:p></span></p></td><td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 324pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="432"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span class="oblog_text">返回这个集中的可用个数<o:p></o:p></span></p></td></tr></tbody></table><br />3.2.       全文检索需求的实现<p>索引建立部分的代码：</p><p><br />private void createIndex(String indexFilePath) throws Exception{</p><p>        IndexWriter iwriter=getWriter(indexFilePath);</p><p>        Document doc=new Document();</p><p>        doc.add(Field.Keyword("name","jerry"));</p><p>        doc.add(Field.Text("sender","<a href="mailto:bluedavy@gmail.com">bluedavy@gmail.com</a>"));</p><p>        doc.add(Field.Text("receiver","<a href="mailto:google@gmail.com">google@gmail.com</a>"));</p><p>        doc.add(Field.Text("title","用于索引的标题"));</p><p>        doc.add(Field.UnIndexed("content","不建立索引的内容"));</p><p>        Document doc2=new Document();</p><p>        doc2.add(Field.Keyword("name","jerry.lin"));</p><p>        doc2.add(Field.Text("sender","<a href="mailto:bluedavy@hotmail.com">bluedavy@hotmail.com</a>"));</p><p>        doc2.add(Field.Text("receiver","<a href="mailto:msn@hotmail.com">msn@hotmail.com</a>"));</p><p>        doc2.add(Field.Text("title","用于索引的第二个标题"));</p><p>        doc2.add(Field.Text("content","建立索引的内容"));</p><p>        iwriter.addDocument(doc);</p><p>        iwriter.addDocument(doc2);</p><p>        iwriter.optimize();</p><p>        iwriter.close();</p><p>    }</p><p>    </p><p>    private IndexWriter getWriter(String indexFilePath) throws Exception{</p><p>        boolean append=true;</p><p>        File file=new File(indexFilePath+File.separator+"segments");</p><p>        if(file.exists())</p><p>            append=false; </p><p>        return new IndexWriter(indexFilePath,analyzer,append);</p><p>    }</p><p><br />3.2.1.       对于某字段的关键字的模糊查询</p><p><br />Query query=new WildcardQuery(new Term("sender","*davy*"));</p><p>        </p><p>        Searcher searcher=new IndexSearcher(indexFilePath);</p><p>        Hits hits=searcher.search(query);</p><p>        for (int i = 0; i &lt; hits.length(); i++) {</p><p>            System.out.println(hits.doc(i).get("name"));</p><p>        }</p><p><br />3.2.2.       对于某字段的关键字的语义查询</p><p><br />Query query=QueryParser.parse("索引","title",analyzer);</p><p>        </p><p>        Searcher searcher=new IndexSearcher(indexFilePath);</p><p>        Hits hits=searcher.search(query);</p><p>        for (int i = 0; i &lt; hits.length(); i++) {</p><p>            System.out.println(hits.doc(i).get("name"));</p><p>        }</p><p><br />3.2.3.       对于多字段的关键字的查询</p><p><br />Query query=MultiFieldQueryParser.parse("索引",new String[]{"title","content"},analyzer);</p><p>        </p><p>        Searcher searcher=new IndexSearcher(indexFilePath);</p><p>        Hits hits=searcher.search(query);</p><p>        for (int i = 0; i &lt; hits.length(); i++) {</p><p>            System.out.println(hits.doc(i).get("name"));</p><p>        }</p><p><br />3.2.4.       复合查询(多种查询条件的综合查询)</p><p><br />Query query=MultiFieldQueryParser.parse("索引",new String[]{"title","content"},analyzer);</p><p>        Query mquery=new WildcardQuery(new Term("sender","bluedavy*"));</p><p>        TermQuery tquery=new TermQuery(new Term("name","jerry"));</p><p>        </p><p>        BooleanQuery bquery=new BooleanQuery();</p><p>        bquery.add(query,true,false);</p><p>        bquery.add(mquery,true,false);</p><p>        bquery.add(tquery,true,false);</p><p>        </p><p>        Searcher searcher=new IndexSearcher(indexFilePath);</p><p>        Hits hits=searcher.search(bquery);</p><p>        for (int i = 0; i &lt; hits.length(); i++) {</p><p>            System.out.println(hits.doc(i).get("name"));</p><p>        }</p><p><br />四.  总结</p><p>相信大家通过上面的说明能知道Lucene的一个基本的使用方法，在全文检索时建议大家先采用语义时的搜索，先搜索出有意义的内容，之后再进行模糊之类的搜索，^_^，这个还是需要根据搜索的需求才能定了，Lucene还提供了很多其他更好用的方法，这个就等待大家在使用的过程中自己去进一步的摸索了，比如对于Lucene本身提供的Query的更熟练的掌握，对于Filter、Sorter的使用，自己扩展实现Analyzer，自己实现Query等等，甚至可以去了解一些关于搜索引擎的技术(切词、索引排序 etc)等等</p><img src ="http://www.blogjava.net/rain1102/aggbug/96356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-28 10:38 <a href="http://www.blogjava.net/rain1102/articles/96356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>