使用Lucene搭建簡單的搜尋引擎

2021-08-31 05:49:12 字數 1424 閱讀 1555

假設現有如下格式的記錄(record)

標題(title)

內容(content)

建立時間(mdtime)

現在要求搭建搜尋引擎實現在標題和內容欄位上進行搜尋,同時按照時間倒序排列

1.    建索引

file index = new file("/usr/local/....");              // 索引檔案存放目錄

indexwriter writer = new indexwriter(index, analyzer); // analyzer是分詞器,根據不同的需要選用不同的分詞器

// lucene自帶的分詞器對中文的支援太弱,網上可以找到中科院分詞和ikanalyzer,另外可以採用目前業界領先的海量分詞

document document = new document();

document.add(new field("title", title, field.store.yes, field.index.tokenized));

document.add(new field("content", content, field.store.no, field.index.tokenized));

document.add(new field("mdtime", mdtime, field.store.yes, field.index.un_tokenized));

writer.adddocument(document);

writer.optimize();

writer.close();

2.    搜尋

indexsearcher searcher = new indexsearcher("/usr/local/....");

booleanquery query = new booleanquery();

queryparser parser = new queryparser("title", analyzer);

// 設定與或關係

parser.setdefaultoperator(queryparser.and_operator);

// 查詢條件

query.add(parser.parse(title_condition), booleanclause.occur.must);

query.add(parser.parse(content_condition), booleanclause.occur.must);

// 排序

hits result = searcher.search(query, new sort("mdtime", true));

// 列印結果

for (int i = 0; i < result.length(); i++)

lucene使用facet搜尋

facet,英文翻譯為方面。lucene中的facet查詢其實就是對事物的方面查詢。我們以手機舉例。乙個手機可以有品牌,型號,運營商等多個facet,不同的facet型別可以組合成不同的手機或者手機的集合。如品牌為小公尺,運營商為移動構成的就是移動發行的所有小公尺的手機型號 小公尺1,小公尺2,小公...

Lucene使用Filter搜尋過濾

排序查詢 param querystr 查詢匹配的字串 param domain 查詢內容的域 param filter 過濾器 public void searchbyfilter string querystr,string domain,filter filter else 輸出資訊 scor...

lucene的多種搜尋

lucene的搜尋相當強大,它提供了很多輔助查詢類,各自完成一種特殊的查詢,也可以相互組合使用,來完成一些複雜的操作.public class test 按詞條搜尋 public void termsearcher throws ioexception 短語搜尋 public void phrase...