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 implementscollector,leafcollector
public leafcollector getleafcollector(leafreadercontext context) throws
ioexception
public
void collect(int doc) throws
ioexception
else
}
4,grouping
索引欄位需設定分詞並設定詞項量
fieldtype type = newfieldtype();
//索引時儲存文件、詞項頻率、位置資訊、偏移資訊
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=newfasttaxonomyfacetcounts(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...