﻿<?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-asdtiang-java study-文章分类-搜索引擎学习</title><link>http://www.blogjava.net/asdtiang/category/43556.html</link><description>交流学习JAVA </description><language>zh-cn</language><lastBuildDate>Tue, 12 Jan 2010 10:37:15 GMT</lastBuildDate><pubDate>Tue, 12 Jan 2010 10:37:15 GMT</pubDate><ttl>60</ttl><item><title>lucene2.4 学习笔记1</title><link>http://www.blogjava.net/asdtiang/articles/309215.html</link><dc:creator>asdtiang</dc:creator><author>asdtiang</author><pubDate>Tue, 12 Jan 2010 10:10:00 GMT</pubDate><guid>http://www.blogjava.net/asdtiang/articles/309215.html</guid><wfw:comment>http://www.blogjava.net/asdtiang/comments/309215.html</wfw:comment><comments>http://www.blogjava.net/asdtiang/articles/309215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asdtiang/comments/commentRss/309215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asdtiang/services/trackbacks/309215.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">网站要用搜索功能，本来想用SQL语句来实现，后来感觉没什么意思，并开始考虑用LUCENE,去官网下载了2.9的版本，发现新东西比较多，于时下载了&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">.4版本.相比以前的版本有些变化。<br />
首先建立Index:类文件如下：<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;jeasy.analysis.MMAnalyzer;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.analysis.Analyzer;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.analysis.standard.StandardAnalyzer;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.document.Document;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.document.Field;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.index.CorruptIndexException;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.index.IndexWriter;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.store.LockObtainFailedException;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;com.lmsCard.www.bean.company.Company;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;com.lmsCard.www.tools.Init;<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;LuceneIndex&nbsp;{<br />
<br />
</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;INDEX_STORE_PATH;<br />
</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;Analyzer&nbsp;analyzer;<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;LuceneIndex(){<br />
Init&nbsp;init</span><span style="color: #000000;">=</span><span style="color: #000000;">Init.getInit();<br />
init.readInfo();<br />
INDEX_STORE_PATH</span><span style="color: #000000;">=</span><span style="color: #000000;">init.LUCENE_INDEX;<br />
System.out.println(INDEX_STORE_PATH);<br />
analyzer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;StandardAnalyzer();<br />
}<br />
</span><span style="color: #008000;">////</span><span style="color: #008000;">/company&nbsp;为一个bean</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;createCompanyIndex(Company&nbsp;company,&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;b)&nbsp;{<br />
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
IndexWriter&nbsp;writer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;IndexWriter(INDEX_STORE_PATH&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">/company</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />
analyzer,&nbsp;b,&nbsp;IndexWriter.MaxFieldLength.UNLIMITED);<br />
System.out.println(INDEX_STORE_PATH</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">/company</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
Document&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Document();<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">商家名称</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">doc.add(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Field(</span><span style="color: #000000;">"</span><span style="color: #000000;">companyName</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;company.getCompanyName(),<br />
Field.Store.NO,&nbsp;Field.Index.ANALYZED));<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;/商家简介</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(company.getInfo()&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />
doc.add(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Field(</span><span style="color: #000000;">"</span><span style="color: #000000;">info</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />
company.getInfo()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">www.lmscard.com</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;Field.Store.NO,<br />
Field.Index.ANALYZED));<br />
}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
doc.add(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Field(</span><span style="color: #000000;">"</span><span style="color: #000000;">info</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;company.getInfo(),&nbsp;Field.Store.NO,<br />
Field.Index.ANALYZED));<br />
}<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;/折扣</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">doc.add(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Field(</span><span style="color: #000000;">"</span><span style="color: #000000;">discount</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;company.getZhekou()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">,<br />
Field.Store.YES,&nbsp;Field.Index.NOT_ANALYZED));<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">备注</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(company.getBeizhu()</span><span style="color: #000000;">==</span><span style="color: #0000ff;">null</span><span style="color: #000000;">||</span><span style="color: #000000;">company.getBeizhu().equals(</span><span style="color: #000000;">""</span><span style="color: #000000;">)){<br />
doc.add(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Field(</span><span style="color: #000000;">"</span><span style="color: #000000;">comment</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;company.getBeizhu()<br />
</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">www.lmscard.com</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;Field.Store.NO,&nbsp;Field.Index.ANALYZED));<br />
}<br />
doc.add(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Field(</span><span style="color: #000000;">"</span><span style="color: #000000;">comment</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;company.getBeizhu()</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">www.lmscard.com</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
,&nbsp;Field.Store.YES,&nbsp;Field.Index.ANALYZED));<br />
<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">/商家编号</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">doc.add(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Field(</span><span style="color: #000000;">"</span><span style="color: #000000;">companyId</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;company.getCompanyId(),<br />
Field.Store.YES,&nbsp;Field.Index.NOT_ANALYZED));<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;/商家地址</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(company.getCompanyAddress()</span><span style="color: #000000;">==</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br />
{<br />
doc.add(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Field(</span><span style="color: #000000;">"</span><span style="color: #000000;">address</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;company.getCompanyAddress()</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">www.lmscard.com</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />
Field.Store.NO,&nbsp;Field.Index.ANALYZED));<br />
}<br />
</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br />
doc.add(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Field(</span><span style="color: #000000;">"</span><span style="color: #000000;">address</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;company.getCompanyAddress(),<br />
Field.Store.YES,&nbsp;Field.Index.ANALYZED));<br />
}<br />
<br />
System.out.println(company.getCompanyId());<br />
writer.addDocument(doc);<br />
writer.close();<br />
<br />
}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(CorruptIndexException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">e.printStackTrace();<br />
}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(LockObtainFailedException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">e.printStackTrace();<br />
}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(IOException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">e.printStackTrace();<br />
}<br />
}<br />
<br />
}<br />
<br />
</span><span style="color: #008000;">////</span><span style="color: #008000;">建立一个搜索类：</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.ArrayList;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.List;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.analysis.Analyzer;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.analysis.standard.StandardAnalyzer;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.document.Document;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.queryParser.MultiFieldQueryParser;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.search.BooleanClause;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.search.IndexSearcher;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.search.Query;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.search.ScoreDoc;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.search.Searcher;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.lucene.search.Sort;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;com.lmsCard.www.tools.Init;<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;LuceneSearch&nbsp;{<br />
</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;Analyzer&nbsp;analyzer;<br />
</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;type;<br />
</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;INDEX_STORE_PATH;<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;LuceneSearch()&nbsp;{<br />
<br />
Init&nbsp;init&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Init.getInit();<br />
init.readInfo();<br />
INDEX_STORE_PATH&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;init.LUCENE_INDEX;<br />
System.out.println(INDEX_STORE_PATH);<br />
analyzer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;StandardAnalyzer();<br />
}<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;List&nbsp;searchCompany(String&nbsp;keyWord,&nbsp;String&nbsp;type1)&nbsp;{<br />
List&nbsp;l&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList();<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(type1&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.type&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">companyName</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
}<br />
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
<br />
BooleanClause.Occur[]&nbsp;clauses&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{&nbsp;BooleanClause.Occur.SHOULD,<br />
BooleanClause.Occur.SHOULD,&nbsp;BooleanClause.Occur.SHOULD,<br />
BooleanClause.Occur.SHOULD&nbsp;};<br />
Searcher&nbsp;searcher&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;IndexSearcher(INDEX_STORE_PATH&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">/company</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
System.out.println(INDEX_STORE_PATH&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;ffff&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;type<br />
</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;keyWord:</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;keyWord);<br />
Query&nbsp;query&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;MultiFieldQueryParser.parse(keyWord,&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String[]&nbsp;{<br />
</span><span style="color: #000000;">"</span><span style="color: #000000;">companyName</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">info</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">comment</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">address</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;},&nbsp;clauses,<br />
analyzer);<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;此处在2.0基础上有改动，此处必须传入一个返回条数，这里用searcher.maxDoc()表示返回所有条数。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">Sort&nbsp;sort</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Sort(</span><span style="color: #000000;">"</span><span style="color: #000000;">backMoney</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
ScoreDoc[]&nbsp;docs&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;searcher.search(query,&nbsp;searcher.maxDoc()).scoreDocs;<br />
System.out.println(docs.length&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">docs.length</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
Document&nbsp;doc;<br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;docs.length;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;searcher.doc(docs[i].doc);<br />
l.add(doc.get(</span><span style="color: #000000;">"</span><span style="color: #000000;">companyId</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
System.out.println(doc.get(</span><span style="color: #000000;">"</span><span style="color: #000000;">companyId</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
<br />
}<br />
}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
e.printStackTrace();<br />
}<br />
</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;l;<br />
}<br />
<br />
}<br />
<br />
</span></div>
<img src ="http://www.blogjava.net/asdtiang/aggbug/309215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asdtiang/" target="_blank">asdtiang</a> 2010-01-12 18:10 <a href="http://www.blogjava.net/asdtiang/articles/309215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>