luncene

2337 ワード

lunceneはテキスト検索エンジンのツールライブラリで、簡単に使用できます.
1、索引の作成
 File indexDir=new File("c:\\temp\\index");
File dataDir=new File("c:\\temp\\data");

IndexWrtier writer=new IndexWriter(indexDir,new StandarAnalyzer(),true);
writer.setUseCompoundFile(false);

Document doc=new Docment();
doc.add(Field.Text("contents",new FileReader(f));
doc .add(Field.Keyword("filename",f.getCanonicalPath()));
writer.addDocument(doc);

writer.optimize();
writer.close();

2、検索
Directory fsDir=FSDirectory.getDirectory(indexDir,false);
IndexiSearcher is = new IndexSearcher(fsDir);
String q="google";
Query query=QueryParser.parse(q,"contents",new StandardAnalyzer());
Hits hits=is.search(query);

for(int i=0;i Document doc=hits.doc(i);
System.out.println(doc.get("filename"));
}

3,Fieldクラス
Keyword:解析は必要ありませんが、逐字逐句インデックスされて格納されます.URL、ファイルシステムパス、日付、個人名に適しています.
UnIndexed:分析もインデックスもされませんが、インデックスファイルに格納されます.
UnStored:UnIndexedとは反対に、インデックスは解析されますが、保存されません.Webページの本文などのビッグデータファイルに適しています.
Text:インデックスを分析する必要があり、stringストレージ、Readerは保存しません
4、最適化
1、ドメイン追加可能
 String baseWord="fast";
String synonyms[]=String{"quick","rapid","speedy"};
Document doc=new Document();
doc.add(Field.Tex("word", baseWord);
for(int i=0;i doc.add(Filed.Text("word",synonyms[i]));
}

2、内部番号でドキュメントを削除する
  IndexReader reader=new IndexReader.open(dir);
reader.delete(1);
reader.maxDoc();
reader.numDocs();

reader.delete(new Term("city","beijin"));

一括削除による更新:
1,IndexReaderオブジェクトを開く
2、削除する必要があるすべてのDocumentオブジェクトを削除する
3、IndexReaderを閉じる
4,IndexWriterを開く
5、必要なDocumentを追加
6,IndexWriterを閉じる
3,doc.setBosst(1.0)インデックスの重要性の比重を強化
4,writer.mergeFactor,maxMergeDocs,minMergeDocs値パフォーマンス向上
5、メモリインデックスRAM Directoryはインデックスをメモリに入れて最高の性能を得る
6.writer.maxFieldLength検索数を制限し、データ量が多ければこれが役に立つ