package com.basistech.rni;

import java.io.IOException;
import java.nio.file.Paths;

import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
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.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public final class LuceneSearchIndex {

    private LuceneSearchIndex() {
    }

    public static void main(String[] args) throws IOException, ParseException {
        if (args.length == 0) {
            throw new RuntimeException("Please provide path to Lucene index directory");
        }

        IndexSearcher indexSearcher = createSearcher(args[0]);
        String queryString = "((bt_rni_name_encoded_1:ALTR~1 bt_rni_name_encoded_1:FLTR~1) | "
                             + "(bt_rni_name_encoded_2:ALTR~1 bt_rni_name_encoded_2:FLTR~1) | "
                             + "(bt_rni_name_encoded_3:ALTR~1 bt_rni_name_encoded_3:FLTR~1) | "
                             + "(bt_rni_name_encoded_4:ALTR~1 bt_rni_name_encoded_4:FLTR~1) | "
                             + "(bt_rni_name_encoded_5:ALTR~1 bt_rni_name_encoded_5:FLTR~1) | "
                             + "(bt_rni_name_encoded_6:ALTR~1 bt_rni_name_encoded_6:FLTR~1))";
        QueryParser queryParser = new QueryParser(queryString, new WhitespaceAnalyzer());
        Query query = queryParser.parse(queryString);
        TopDocs hits = indexSearcher.search(query, 10);
        System.out.println("Max score: " + hits.scoreDocs[0].score);
    }

    private static IndexSearcher createSearcher(String indexDir) throws IOException {
        Directory dir = FSDirectory.open(Paths.get(indexDir));
        IndexReader reader = DirectoryReader.open(dir);
        IndexSearcher searcher = new IndexSearcher(reader);
        return searcher;
    }
}

