Örnek

Basit Bir İçerik İndexleme ve Birden Fazla Alan İçin Arama Örneği

Aşağıdaki uygulama iki Document oluşturup index'lemekte ve iki alan içinde 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.Field.Store;
import org.apache.lucene.document.LongField;
import org.apache.lucene.document.TextField;
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.MultiFieldQueryParser;
import org.apache.lucene.queryparser.classic.ParseException;
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 TestMultipleField {

	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));
		d1.add(new TextField("info","Veli ve Ahmet'de 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));
		d2.add(new TextField("info","Mustafa ve Ali'de 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);
		
		MultiFieldQueryParser parser=new MultiFieldQueryParser(new String[] { "content", "info" },
				analyzer);
		Query query = parser.parse("Kaya");
		
		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"));
		}
	}
}
Tek bir alanda arama yapmak için aşağıdaki gibi yapmak gerekir :
QueryParser parser=new QueryParser("content",analyzer);
Query query=parser.parse("Ev");
Birden fazla aramak için ise aşağıdaki gibi kod yazılır
MultiFieldQueryParser parser=new MultiFieldQueryParser(new String[] { "content", "info" },analyzer);
Query query = parser.parse("Kaya");
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>
cicikız , 04.03.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