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>