[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lucene-user
Subject:    Re: Fast access to a random page of the search results.
From:       "Stanislav Jordanov" <stenly () sirma ! bg>
Date:       2005-03-01 8:43:38
Message-ID: 023801c51e3a$c38ab0f0$d380a8c0 () sirma ! int
[Download RAW message or body]

// The test source code (second attempt).
// Just in case the .txt attachment does not pass through
// I am pasting the code here:

package index_test;

import org.apache.lucene.search.*;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.Directory;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;

import java.io.*;
import java.util.Enumeration;
import java.util.StringTokenizer;
import java.util.ArrayList;

import com.odi.util.query.QueryParseException;

public class Search {
    public static void main(String[] args) throws Exception {
        if (args.length != 1) {
            throw new Exception("Usage: " + Search.class.getName() + "
<index dir>");
        }

        File indexDir = new File(args[0]);

        if (!indexDir.exists() || !indexDir.isDirectory()) {
            throw new Exception(indexDir + " is does not exist or is not a
directory.");
        }

        System.out.println("Using index: " + indexDir.getCanonicalPath());

        BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE);
        search(indexDir);
    }

    public static void search(File indexDir)  throws Exception {
        Directory fsDir = FSDirectory.getDirectory(indexDir, false);
        IndexSearcher is = null;
        BufferedReader brdr = new BufferedReader(new
InputStreamReader(System.in));

        String q;
        Sort sort = null;
        while (!(q = brdr.readLine()).equals("exit")) {
            q = q.trim();
            if (is == null || q.equals("newsearcher")) {
                is = new IndexSearcher(fsDir);
                if (q.equals("newsearcher")) {
                    continue;
                }
            }
            if (q.startsWith("sort ")) {
                StringTokenizer tkz = new StringTokenizer(q);
                tkz.nextToken(); // skip the "sort" word
                ArrayList<SortField> sortFields = new
ArrayList<SortField>();
                while (tkz.hasMoreTokens()) {
                    String tok = tkz.nextToken();
                    boolean reverse = false;
                    if (tok.startsWith("-")) {
                        tok = tok.substring(1);
                        reverse = true;
                    }
                    sortFields.add(new SortField(tok, reverse));
                }
                sort = new Sort(sortFields.toArray(new SortField[0]));
                System.out.println("Sorting by " + sort);
                continue;
            }
            if (q.equals("nosort")) {
                sort = null;
                System.out.println("Sorting is off");
                continue;
            }
            long startTs = System.currentTimeMillis();
            Query query = null;
            try {
                query  = QueryParser.parse(q, "qcontent", new
StandardAnalyzer(new String[0]));
            }
            catch (QueryParseException exn) {
                exn.printStackTrace();
                continue;
            }
            Hits hits = (sort != null ? is.search(query, sort) :
is.search(query));
            int nHits = hits.length();//hc.nHits;
            long stopTs  = System.currentTimeMillis();
            System.out.println("Found " + nHits + " document(s) that matched
query '" + q + "'");
            System.out.println("Sorting by " + sort);
            System.out.println("query executed in " + (stopTs - startTs) +
"ms");

            if (nHits > 0) {
                startTs = System.currentTimeMillis();
                dummyMethod(hits.doc(nHits - nHits));
                stopTs = System.currentTimeMillis();
                System.out.println("Last doc accessed in " + (stopTs -
startTs)
                                    + "ms");
            }
        }
    }

    public static double  dummyMethod(Document doc) {
        return doc.getBoost();
    }

    private static void  dumpDocument(Document doc) throws IOException {
        System.out.println("<DOCUMENT-DUMP>");
        for (Enumeration e = doc.fields(); e.hasMoreElements(); ) {
            Field f = (Field) e.nextElement();
            System.out.println(f.name() + " ::>> '" + f.stringValue() +
"'");
        }
        System.out.println("</DOCUMENT-DUMP>");
    }
}

["Search.java.txt" (text/plain)]

package index_test;

import org.apache.lucene.search.*;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.Directory;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;

import java.io.*;
import java.util.Enumeration;
import java.util.StringTokenizer;
import java.util.ArrayList;

import com.odi.util.query.QueryParseException;

public class Search {
    public static void main(String[] args) throws Exception {
        if (args.length != 1) {
            throw new Exception("Usage: " + Search.class.getName() + " <index dir>");
        }

        File indexDir = new File(args[0]);

        if (!indexDir.exists() || !indexDir.isDirectory()) {
            throw new Exception(indexDir + " is does not exist or is not a directory.");
        }

        System.out.println("Using index: " + indexDir.getCanonicalPath());

        BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE);
        search(indexDir);
    }

    public static void search(File indexDir)  throws Exception {
        Directory fsDir = FSDirectory.getDirectory(indexDir, false);
        IndexSearcher is = null;
        BufferedReader brdr = new BufferedReader(new InputStreamReader(System.in));

        String q;
        Sort sort = null;
        while (!(q = brdr.readLine()).equals("exit")) {
            q = q.trim();
            if (is == null || q.equals("newsearcher")) {
                is = new IndexSearcher(fsDir);
                if (q.equals("newsearcher")) {
                    continue;
                }
            }
            if (q.startsWith("sort ")) {
                StringTokenizer tkz = new StringTokenizer(q);
                tkz.nextToken(); // skip the "sort" word
                ArrayList<SortField> sortFields = new ArrayList<SortField>();
                while (tkz.hasMoreTokens()) {
                    String tok = tkz.nextToken();
                    boolean reverse = false;
                    if (tok.startsWith("-")) {
                        tok = tok.substring(1);
                        reverse = true;
                    }
                    sortFields.add(new SortField(tok, reverse));
                }
                sort = new Sort(sortFields.toArray(new SortField[0]));
                System.out.println("Sorting by " + sort);
                continue;
            }
            if (q.equals("nosort")) {
                sort = null;
                System.out.println("Sorting is off");
                continue;
            }
            long startTs = System.currentTimeMillis();
            Query query = null;
            try {
                query  = QueryParser.parse(q, "qcontent", new StandardAnalyzer(new String[0]));
            }
            catch (QueryParseException exn) {
                exn.printStackTrace();
                continue;
            }
            Hits hits = (sort != null ? is.search(query, sort) : is.search(query));
            int nHits = hits.length();//hc.nHits;
            long stopTs  = System.currentTimeMillis();
            System.out.println("Found " + nHits + " document(s) that matched query '" + q + "'");
            System.out.println("Sorting by " + sort);
            System.out.println("query executed in " + (stopTs - startTs) + "ms");

            if (nHits > 0) {
                startTs = System.currentTimeMillis();
                dummyMethod(hits.doc(nHits - nHits));
                stopTs = System.currentTimeMillis();
                System.out.println("Last doc accessed in " + (stopTs - startTs)
                                    + "ms");
            }
        }
    }

    public static double  dummyMethod(Document doc) {
        return doc.getBoost();
    }

    private static void  dumpDocument(Document doc) throws IOException {
        System.out.println("<DOCUMENT-DUMP>");
        for (Enumeration e = doc.fields(); e.hasMoreElements(); ) {
            Field f = (Field) e.nextElement();
            System.out.println(f.name() + " ::>> '" + f.stringValue() + "'");
        }
        System.out.println("</DOCUMENT-DUMP>");
    }
}



---------------------------------------------------------------------
To unsubscribe, e-mail: lucene-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-user-help@jakarta.apache.org

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic