Örnek

Basit Bir İçerik İndexleme ve Arama Örneği

Aşağıdaki uygulama iki Document oluşturup index'lemekte ve arama yaparak sonucu ekrana basmaktadır :
import java.io.IOException;
import java.nio.file.Paths;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.tr.TurkishAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.LongField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class Test {

	public static void main(String[] args) 
			throws IOException, ParseException {
		
		Directory dir = FSDirectory.open(Paths.get("/Index"));
		
		Analyzer analyzer = new TurkishAnalyzer();
		
		IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
		iwc.setOpenMode(OpenMode.CREATE);
		
		IndexWriter writer = new IndexWriter(dir, iwc);
		
		Document d1=new Document();
		d1.add(new LongField("id",1,Store.YES));
		d1.add(new TextField("content","Ali eve dün geldi",Store.YES));
		
		Document d2=new Document();
		d2.add(new LongField("id",2,Store.YES));
		d2.add(new TextField("content","Kaya dün evden döndü",Store.YES));
		
		writer.addDocument(d1);
		writer.addDocument(d2);
		
		System.out.println(writer.numDocs() + " document is indexed");
		
		writer.close();		
		
		IndexReader reader = DirectoryReader.open(dir);
		IndexSearcher indexSearcher = new IndexSearcher(reader);

		QueryParser parser=new QueryParser("content",analyzer);
		Query query=parser.parse("Ev");
		
		TopDocs topDocs= indexSearcher.search(query, 100); 

		System.out.println(topDocs.totalHits + " adet sonuc bulundu");
		
		ScoreDoc[] scoreDocs=topDocs.scoreDocs;
	
		for (ScoreDoc scoreDoc : scoreDocs) {
			Document doc = indexSearcher.doc(scoreDoc.doc);
			System.out.println("id:"+doc.get("id")+" content:"+doc.get("content"));
		}
	}
}
Test uygulamasında "Ali eve dün geldi" ve "Kaya dün evden döndü" şeklinde iki içerik index'lenmektedir. Sonra bu indexlenmiş verilerin bulunduğu klasör kullanılarak arama yapılmaktadır. "Ev" ifadesi arandığında iki içerikte sonuçta alınacaktır. Ekranda aşağıdaki gibi açıklamalar görünecektir:


2 document is indexed
2 adet sonuc bulundu
id:1 content:Ali eve dün geldi
id:2 content:Kaya dün evden döndü

Bu örneğin çalışması için lucene-core, lucene-queryparser, lucene-analyzers-common kütüphaneleri gerekmektedir. Maven kullanılan bir proje aşağıdaki gibi ekleyebilir : 

<dependencies>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>5.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>5.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>5.4.1</version>
</dependency>
</dependencies>




zafer.teker , 28.02.2016

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir

Misafir Yorumları




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir