package lia.analysis.i18n;

import java.io.IOException;

import lia.analysis.AnalyzerUtils;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;


public class JapaneseDemo
{
    private static final String FIELD_CONTENT = "content";
    private static final String[] contents = 
    {
        "ÔÔÌÈªËªÏªªª¤ª·ª¤«é?«á«óè©ª¬ª¿ª¯ªµªóª¢ªêªÞª¹¡£", "ÝÁú­Ô³ªËªâªªª¤ª·ª¤«é?«á«óè©ª¬ª¢ªêªÞª¹¡£"
    };
    private static final String phrase = "«é?«á«óè©";
    //private static final String phrase = "è©";
    private static Analyzer analyzer = null;

    /**
     * DOCUMENT ME!
     * 
     * @param args DOCUMENT ME!
     * @throws IOException DOCUMENT ME!
     * @throws ParseException DOCUMENT ME!
     */
    public static void main(String[] args)
            throws IOException, ParseException
    {
        Directory directory = makeIndex();
        analysis();
        search(directory);
        directory.close();
    }

    /**
     * DOCUMENT ME!
     * 
     * @return DOCUMENT ME! 
     */
    private static Analyzer getAnalyzer()
    {
        if (analyzer == null)
        {
            analyzer = new StandardAnalyzer();
            // analyzer = new CJKAnalyzer();
        }

        return analyzer;
    }

    /**
     * DOCUMENT ME!
     * 
     * @throws IOException DOCUMENT ME!
     */
    private static void analysis()
            throws IOException
    {
        AnalyzerUtils.displayTokens(getAnalyzer(), phrase);
    }

    /**
     * DOCUMENT ME!
     * 
     * @return DOCUMENT ME! 
     * @throws IOException DOCUMENT ME!
     */
    private static Directory makeIndex()
            throws IOException
    {
        Directory directory = new RAMDirectory();
        IndexWriter writer = new IndexWriter(directory, getAnalyzer(), 
                                             true);
        for (int i = 0; i < contents.length; i++)
        {
            Document doc = new Document();
            doc.add(new Field(FIELD_CONTENT, contents[i], true, true, 
                              true));
            writer.addDocument(doc);
        }

        writer.close();
        return directory;
    }

    /**
     * DOCUMENT ME!
     * 
     * @param directory DOCUMENT ME!
     * @throws IOException DOCUMENT ME!
     * @throws ParseException DOCUMENT ME!
     */
    private static void search(Directory directory)
            throws IOException, ParseException
    {
        IndexSearcher searcher = new IndexSearcher(directory);
        QueryParser parser = new QueryParser(FIELD_CONTENT, 
                                             getAnalyzer());
        System.out.println(
                " analyzer = " + 
                getAnalyzer().getClass().getName());
        System.out.println("phrase = " + phrase);
        Query query = parser.parse(phrase);
        System.out.println("query = " + query);
        Hits hits = searcher.search(query);
        for (int i = 0; i < hits.length(); i++)
            System.out.println(
                    "doc = " + hits.doc(i).get(FIELD_CONTENT));

        searcher.close();
    }
}

