package org.aksw.gerbil.semantic.sameas.index; import java.io.File; import java.io.IOException; import java.util.Collection; import org.aksw.gerbil.datatypes.ErrorTypes; import org.aksw.gerbil.exceptions.GerbilException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.StringField; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.index.Term; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Indexer extends LuceneConstants { private static final Logger LOGGER = LoggerFactory .getLogger(Indexer.class); public IndexWriter writer; private Directory dir; public Indexer(String path) throws GerbilException { try { dir = FSDirectory.open(new File(path).toPath()); Analyzer analyzer = new StandardAnalyzer(); IndexWriterConfig config = new IndexWriterConfig(analyzer); config.setOpenMode(OpenMode.CREATE); writer = new IndexWriter(dir, config); } catch (IOException e) { LOGGER.error("Error occured during accesing file " + path, e); throw new GerbilException(ErrorTypes.UNEXPECTED_EXCEPTION); } } public void close() { try { writer.commit(); writer.close(); dir.close(); } catch (IOException e) { LOGGER.error("Error occured during closing Index Writer", e); } } public void index(String uri, Collection<String> uris) { indexSameAs(uri, uris); } private String listToStr(Collection<String> uris) { String entity = ""; for (String uri : uris) { entity += uri + " "; } return entity; } public void indexSameAs(String uri, Collection<String> uris) { Document doc = convertTerm(uri, listToStr(uris)); try { writer.addDocument(doc); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private Document convertTerm(String uri, String sameAs) { Document document = new Document(); Field contentField = new StringField(CONTENTS, uri, Field.Store.YES); Field sameAsField = new StringField(SAMEAS, sameAs, Field.Store.YES); document.add(contentField); document.add(sameAsField); return document; } }