Package org.apache.oodt.cas.filemgr.tools

Source Code of org.apache.oodt.cas.filemgr.tools.RangeQueryTester

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.oodt.cas.filemgr.tools;

//JDK imports
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

//Lucene imports
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.RangeQuery;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TermQuery;

/**
* @author mattmann
* @version $Revision$
*
* <p>
* A Utility command line program to test RangeQueries against an underlying
* Lucene-based Product Catalog.
* </p>
*
*/
public final class RangeQueryTester {

    private String startFieldName = null;

    private String endFieldName = null;

    private String startFieldStartValue = null;

    private String startFieldEndValue = null;

    private String endFieldStartValue = null;

    private String endFieldEndValue = null;

    private String indexPath = null;

    /* our log stream */
    private static Logger LOG = Logger.getLogger(RangeQueryTester.class
            .getName());

    /**
     *
     */
    public RangeQueryTester() {
    }

    public List doRangeQuery(String productTypeId) {
        List products = null;
        IndexSearcher searcher = null;

        try {
            searcher = new IndexSearcher(this.indexPath);

            // construct a Boolean query here
            BooleanQuery booleanQuery = new BooleanQuery();

            // add the product type as the first clause
            TermQuery prodTypeTermQuery = new TermQuery(new Term(
                    "product_type_id", productTypeId));
            booleanQuery.add(prodTypeTermQuery, BooleanClause.Occur.MUST);

            Term startFieldStartTerm = null, startFieldEndTerm = null;

            if (this.startFieldStartValue != null) {
                startFieldStartTerm = new Term(this.startFieldName,
                        this.startFieldStartValue);
            }

            if (this.startFieldEndValue != null) {
                startFieldEndTerm = new Term(this.startFieldName,
                        this.startFieldEndValue);
            }

            RangeQuery query1 = new RangeQuery(startFieldStartTerm,
                    startFieldEndTerm, true);
            booleanQuery.add(query1, BooleanClause.Occur.MUST);

            if (this.endFieldName != null
                    && (this.endFieldStartValue != null || this.endFieldEndValue != null)) {
                Term endFieldEndTerm = null, endFieldStartTerm = null;

                if (this.endFieldStartValue != null) {
                    endFieldStartTerm = new Term(this.endFieldName,
                            this.endFieldStartValue);
                }

                if (this.endFieldEndValue != null) {
                    endFieldEndTerm = new Term(this.endFieldName,
                            this.endFieldEndValue);
                }

                RangeQuery query2 = new RangeQuery(endFieldStartTerm,
                        endFieldEndTerm, true);
                booleanQuery.add(query2, BooleanClause.Occur.MUST);
            }

            Sort sort = new Sort(new SortField("CAS.ProductReceivedTime",
                    SortField.STRING, true));
            Hits hits = searcher.search(booleanQuery, sort);
            if (hits.length() > 0) {
                products = new Vector(hits.length());
                for (int i = 0; i < hits.length(); i++) {
                    Document productDoc = hits.doc(i);
                    products.add(productDoc.get("reference_data_store"));
                }
            } else {
                LOG.log(Level.WARNING, "Query: [" + query1
                        + "] for Product Type: [" + productTypeId
                        + "] returned no results");
            }

        } catch (IOException e) {
            LOG.log(Level.WARNING,
                    "IOException when opening index directory: ["
                            + this.indexPath + "] for search: Message: "
                            + e.getMessage());
            throw new RuntimeException(e.getMessage());
        } finally {
            if (searcher != null) {
                try {
                    searcher.close();
                } catch (Exception ignore) {
                }
                searcher = null;
            }
        }

        return products;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        String usage = "RangeQueryTester [options]\n"
                + "\t--idxPath </path/to/lucene/index>\n"
                + "\t--productTypeId <product type>\n"
                + "\t--startField <field for start range>\n"
                + "\t--endField <field for end range>\n"
                + "\t--startFieldStart <value>\n"
                + "\t--startFieldEnd <value>\n" + "\t--endFieldStart <value>\n"
                + "\t--endFieldEnd <value>\n";

        String idxPath = null, startField = null, endField = null;
        String startFieldStart = null, startFieldEnd = null;
        String endFieldStart = null, endFieldEnd = null;
        String productTypeId = null;

        for (int i = 0; i < args.length; i++) {
            if (args[i].equals("--idxPath")) {
                idxPath = args[++i];
            } else if (args[i].equals("--startField")) {
                startField = args[++i];
            } else if (args[i].equals("--endField")) {
                endField = args[++i];
            } else if (args[i].equals("--startFieldStart")) {
                startFieldStart = args[++i];
            } else if (args[i].equals("--startFieldEnd")) {
                startFieldEnd = args[++i];
            } else if (args[i].equals("--endFieldStart")) {
                endFieldStart = args[++i];
            } else if (args[i].equals("--endFieldEnd")) {
                endFieldEnd = args[++i];
            } else if (args[i].equals("--productTypeId")) {
                productTypeId = args[++i];
            }
        }

        if (idxPath == null || productTypeId == null || startField == null
                || (startFieldStart == null && startFieldEnd == null)) {
            System.err.println(usage);
            System.exit(1);
        }

        RangeQueryTester queryTester = new RangeQueryTester();
        queryTester.setIndexPath(idxPath);
        queryTester.setStartFieldEndValue(startFieldEnd);
        queryTester.setStartFieldStartValue(startFieldStart);
        queryTester.setStartFieldName(startField);
        queryTester.setEndFieldName(endField);
        queryTester.setEndFieldStartValue(endFieldStart);
        queryTester.setEndFieldEndValue(endFieldEnd);

        List productFiles = queryTester.doRangeQuery(productTypeId);

        if (productFiles != null && productFiles.size() > 0) {
            for (Iterator i = productFiles.iterator(); i.hasNext();) {
                String productFile = (String) i.next();
                System.out.println(productFile);
            }
        } else
            System.out.println("No results found!");
    }

    /**
     * @return Returns the endFieldName.
     */
    public String getEndFieldName() {
        return endFieldName;
    }

    /**
     * @param endFieldName
     *            The endFieldName to set.
     */
    public void setEndFieldName(String endFieldName) {
        this.endFieldName = endFieldName;
    }

    /**
     * @return Returns the indexPath.
     */
    public String getIndexPath() {
        return indexPath;
    }

    /**
     * @param indexPath
     *            The indexPath to set.
     */
    public void setIndexPath(String indexPath) {
        this.indexPath = indexPath;
    }

    /**
     * @return Returns the startFieldName.
     */
    public String getStartFieldName() {
        return startFieldName;
    }

    /**
     * @param startFieldName
     *            The startFieldName to set.
     */
    public void setStartFieldName(String startFieldName) {
        this.startFieldName = startFieldName;
    }

    /**
     * @return Returns the endFieldEndValue.
     */
    public String getEndFieldEndValue() {
        return endFieldEndValue;
    }

    /**
     * @param endFieldEndValue
     *            The endFieldEndValue to set.
     */
    public void setEndFieldEndValue(String endFieldEndValue) {
        this.endFieldEndValue = endFieldEndValue;
    }

    /**
     * @return Returns the endFieldStartValue.
     */
    public String getEndFieldStartValue() {
        return endFieldStartValue;
    }

    /**
     * @param endFieldStartValue
     *            The endFieldStartValue to set.
     */
    public void setEndFieldStartValue(String endFieldStartValue) {
        this.endFieldStartValue = endFieldStartValue;
    }

    /**
     * @return Returns the startFieldEndValue.
     */
    public String getStartFieldEndValue() {
        return startFieldEndValue;
    }

    /**
     * @param startFieldEndValue
     *            The startFieldEndValue to set.
     */
    public void setStartFieldEndValue(String startFieldEndValue) {
        this.startFieldEndValue = startFieldEndValue;
    }

    /**
     * @return Returns the startFieldStartValue.
     */
    public String getStartFieldStartValue() {
        return startFieldStartValue;
    }

    /**
     * @param startFieldStartValue
     *            The startFieldStartValue to set.
     */
    public void setStartFieldStartValue(String startFieldStartValue) {
        this.startFieldStartValue = startFieldStartValue;
    }

}
TOP

Related Classes of org.apache.oodt.cas.filemgr.tools.RangeQueryTester

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.