最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Lucene實(shí)現(xiàn)一個(gè)簡單的布爾搜索功能

 更新時(shí)間:2017年04月12日 09:54:10   作者:鴻武  
Lucene是一個(gè)全文搜索框架,而不是應(yīng)用產(chǎn)品。因此它并不像www.baidu.com 或者google Desktop那么拿來就能用,它只是提供了一種工具讓你能實(shí)現(xiàn)這些產(chǎn)品。接下來通過本文給大家介紹使用Lucene實(shí)現(xiàn)一個(gè)簡單的布爾搜索功能

什么是lucene

Lucene是apache軟件基金會(huì)jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開放源代碼的全文檢索引擎工具包,但它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。

    Lucene是一個(gè)全文搜索框架,而不是應(yīng)用產(chǎn)品。因此它并不像www.baidu.com 或者google Desktop那么拿來就能用,它只是提供了一種工具讓你能實(shí)現(xiàn)這些產(chǎn)品。

 在布爾查詢的對(duì)象中,包含一個(gè)子句的集合,各個(gè)子句間都是如“與”、“或”這樣的布爾邏輯。Lucene中所遇到的各種復(fù)雜查詢,最終都可以表示成布爾型的查詢。下面代碼就是實(shí)現(xiàn)了一個(gè)簡單的布爾查詢。

package LuceneSearch; 
import org.apache.lucene.analysis.standard.StandardAnalyzer; 
import org.apache.lucene.document.Document; 
import org.apache.lucene.document.Field; 
import org.apache.lucene.index.IndexWriter; 
import org.apache.lucene.index.Term; 
import org.apache.lucene.search.BooleanClause; 
import org.apache.lucene.search.BooleanQuery; 
import org.apache.lucene.search.Hits; 
import org.apache.lucene.search.IndexSearcher; 
import org.apache.lucene.search.TermQuery; 
/** 
 * 布爾搜索測試 
 * @author sdu20 
 * 
 */ 
public class BooleanQueryTest { 
 static final String INDEX_STORE_PATH = "E:\\編程局\\Java編程處\\Index\\"; 
 public static void main(String[] args) { 
 // TODO Auto-generated method stub 
 try{ 
  IndexWriter writer = new IndexWriter(INDEX_STORE_PATH,new StandardAnalyzer(),true); 
  writer.setUseCompoundFile(false); 
  //創(chuàng)建8個(gè)文檔 
  Document doc1 = new Document(); 
  Document doc2 = new Document(); 
  Document doc3 = new Document(); 
  Document doc4 = new Document(); 
  Document doc5 = new Document(); 
  Document doc6 = new Document(); 
  Document doc7 = new Document(); 
  Document doc8 = new Document(); 
  Field f1 = new Field("bookname","鋼鐵是怎樣煉成的",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f2 = new Field("bookname","英雄兒女",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f3 = new Field("bookname","浮生六記",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f4 = new Field("bookname","太平廣記",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f5 = new Field("bookname","文化苦旅",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f6 = new Field("bookname","白夜行",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f7 = new Field("bookname","白毛女",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f8 = new Field("bookname","子不語",Field.Store.YES,Field.Index.TOKENIZED); 
  doc1.add(f1); 
  doc2.add(f2); 
  doc3.add(f3); 
  doc4.add(f4); 
  doc5.add(f5); 
  doc6.add(f6); 
  doc7.add(f7); 
  doc8.add(f8); 
  writer.addDocument(doc1); 
  writer.addDocument(doc2); 
  writer.addDocument(doc3); 
  writer.addDocument(doc4); 
  writer.addDocument(doc5); 
  writer.addDocument(doc6); 
  writer.addDocument(doc7); 
  writer.addDocument(doc8); 
  writer.close(); 
  System.out.println("創(chuàng)建索引成功"); 
  IndexSearcher searcher = new IndexSearcher(INDEX_STORE_PATH); 
  //創(chuàng)建兩個(gè)詞條對(duì)象 
  Term t1 = new Term("bookname","生"); 
  Term t2 = new Term("bookname","記"); 
  TermQuery q1 = new TermQuery(t1); 
  TermQuery q2 = new TermQuery(t2); 
  BooleanQuery query = new BooleanQuery(); 
  query.add(q1,BooleanClause.Occur.MUST); 
  query.add(q2,BooleanClause.Occur.MUST); 
  Hits hits = searcher.search(query); 
  for(int i = 0;i<hits.length();i++){ 
  System.out.println(hits.doc(i)); 
  } 
  System.out.println("搜索成功"); 
 }catch(Exception e){ 
  System.out.println(e.getStackTrace()); 
 } 
 } 
} 

BooleanClause.Occur類主要有3種表示,即MUST、MUST_NOT和SHOULD。MUST與MUST_NOT不難理解,一看名字就知道是什么意思,而SHOULD是一個(gè)比較特殊的約束,當(dāng)它與MUST聯(lián)用時(shí),它將失去意義。檢索的結(jié)果為MUST子句的檢索結(jié)果。當(dāng)它與MUST_NOT聯(lián)用時(shí),SHOULD的功能就與MUST一樣,就退變?yōu)镸UST和MUST_NOT的查詢結(jié)果。當(dāng)SHOULD與SHOULD聯(lián)用時(shí),它們就表示一種“或”關(guān)系。最終檢索結(jié)果為所有檢索子句的檢索結(jié)果的并集。

上面代碼就是查詢索引中有“生”字和“記”字的文檔,程序運(yùn)行結(jié)果截圖如下

索引目錄文件夾下截圖如下

以上所述是小編給大家介紹的使用Lucene實(shí)現(xiàn)一個(gè)簡單的布爾搜索功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

页游| 江陵县| 海晏县| 炎陵县| 吉首市| 阿拉善左旗| 安陆市| 成武县| 鄯善县| 石城县| 阜平县| 宜川县| 建昌县| 洛阳市| 永川市| 淮阳县| 自贡市| 湟中县| 葵青区| 股票| 浦城县| 宝兴县| 正镶白旗| 黄冈市| 炎陵县| 徐汇区| 温州市| 绥中县| 尖扎县| 团风县| 开鲁县| 淳化县| 高雄县| 辉县市| 丹东市| 陆良县| 汶上县| 交口县| 织金县| 通河县| 吉首市|