lucene學習筆記

2022-09-03 16:48:12 字數 3142 閱讀 9367

1,建立索引

directory directory=fsdirectory.open(paths.get(filename));

indexwriterconfig iwc=new indexwriterconfig(new standadanalyzer());

iwc.setopenmode(openmode.create);

indexwriter writer=new indexwriter(,directory,iwc);

document doc=new document();

doc.add(new textfield(name,value));

writer.adddocument(doc);

directory.close();

directory.close();

2,簡單搜尋

path indexpath =paths.get(filename);

directory dir =fsdirectory.open(indexpath);

indexreader reader =directoryreader.open(dir);

indexsearcher searcher = new

indexsearcher(reader);

term term = new

term(field, keyword);

query termquery = new

termquery(term);

system.out.println("query:"+termquery);

//返回前10條

topdocs tds = searcher.search(termquery, 10);

system.out.println(tds.totalhits);

for(scoredoc sd : tds.scoredocs)

dir.close();

reader.close();

3,收集器

實現collector和leafcollector

getleafcollector中獲取reader

collect中統計

countcollector implements

collector,leafcollector

public leafcollector getleafcollector(leafreadercontext context) throws

ioexception

public

void collect(int doc) throws

ioexception

else

}

4,grouping

索引欄位需設定分詞並設定詞項量

fieldtype type = new

fieldtype();

//索引時儲存文件、詞項頻率、位置資訊、偏移資訊

type.setindexoptions(indexoptions.docs_and_freqs_and_positions_and_offsets);

type.setstored(

true);//

原始字串全部被儲存在索引中

type.setstoretermvectors(true);//

儲存詞項量

type.settokenized(true);//

詞條化

long t1=system.currenttimemillis();

groupingsearch groupingsearch=new groupingsearch("time");

groupingsearch.setallgroups(

true

); groupingsearch.setcachinginmb(4.0,true

); groupingsearch.setfillsortfields(

true

); indexsearcher searcher=null

;

try system.out.println("time cost:"+(system.currenttimemillis()-t1));

system.out.println("總資料量:"+total);

int totalgroupcount =result.totalgroupcount;

system.out.println(totalgroupcount);

}catch

(exception e)

5,facet

維度統計,需設定維度欄位facetfield

第一步構造索引searcher

indexreader indexreader=directoryreader.open(indexdir);

indexsearcher searcher=new indexsearcher(indexreader);

第二步構造facetreader

taxonomyreader taxoreader=new directorytaxonomyreader(taxodir);

第三步,設定收集器

facetscollector fc=new facetscollector();

第四步搜尋

termquery query=new termquery(new term("device","手機"));

facetscollector.search(searcher,query,10,fc);

第五步獲取維度統計結果

facets facets=new

fasttaxonomyfacetcounts(taxoreader,config,fc);

list

results=facets.getalldims(10);

for(facetresult tmp:results)

drilldownquery可以設定多個查詢維度

drillsideways搜尋同類

Lucene 學習筆記

調整索引索引效能 在乙個典型的索引應用中,程式效能的瓶頸存在於將索引檔案寫入磁碟的過程中。如果你曾經分析過索引過索引應用程式,應該會發現執行程式大部分時間都消耗在操作索引檔案的程式段上,因此我們必要使lucene索引新物件和修改索引檔案時變得更智慧型。當新的document物件新增到lucene的索...

lucene學習筆記

public class luceneadd catch exception e public class lucenesearch public static void main string args file indexdir new file d index try 在磁碟中檢索索引 dir...

Lucene學習筆記

1 lucene的field中的store和index屬性 如果field的store是yes的話,表明這個資料是要儲存在lucene檔案中的,可以用get方法得到 如果field的index是analyzed的話,表明這個資料是有被索引的,可以被搜尋的。這個兩個屬性的四種組合分別的含義是 a st...