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:
<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>
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>