TestSearch.java Source code

Java tutorial

Introduction

Here is the source code for TestSearch.java

Source

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.MultiReader;
import org.apache.lucene.score.ScorePluginLoader;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Explanation;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.util.BitVector;

import cn.b2b.common.search.IndexConfig;
import cn.b2b.common.search.bean.Hit;
import cn.b2b.common.search.bean.ProductHits;
import cn.b2b.common.search.bean.company.ClusterBean;
import cn.b2b.common.search.bean.product.ProductQueryParam;
import cn.b2b.common.search.query.Query;
import cn.b2b.common.search.query.filter.QueryFilters;
import cn.b2b.common.search.util.Constants;
import cn.b2b.index.product.client.IProductUpdateBean;
import cn.b2b.index.product.client.ProductUpdateBeanImpl;
import cn.b2b.index.product.common.ProductConstants;
import cn.b2b.index.product.index.ProductQueryOptimizer;
import cn.b2b.lucene.search.memory.MemoryFieldCache;
import cn.b2b.lucene.search.plugin.ScoreParam;

public class TestSearch {
    public static void main(String[] args) throws Exception {

        String path = "E:\\jar\\product-index-mongo\\product-index-mongo\\index";
        List<IndexReader> readers = new ArrayList<IndexReader>();
        IndexReader reader1 = IndexReader.open(path);

        readers.add(reader1);

        System.out.println("DOC2 TOTAL:\t" + reader1.maxDoc());

        MultiReader reader = new MultiReader(readers.toArray(new IndexReader[0]));
        IndexConfig config = new IndexConfig();
        config.initConfig("D:\\mainonecode\\mainonesearch\\mainone-index-product\\config\\index\\index.conf");
        QueryFilters.loadFilters("D:\\mainonecode\\mainonesearch\\mainone-index-product\\config\\index\\filter");
        IndexSearcher searcher = new IndexSearcher(reader, false, config, null, null);
        // searcher.delDocByDocnum(new int[]{714575965});
        // searcher.unDeleteDocByDocNum(714575965);
        ScorePluginLoader.load(reader);
        // ScoreParam scoreParam = new ScoreParam();
        // scoreParam.setSearchType((byte)1);
        // // scoreParam.setSearchType((byte)5);
        // scoreParam.setSortType((byte)-1);
        // scoreParam.setLongitude(104.08022f);
        // scoreParam.setLatitude(30.635338f);
        // scoreParam.setLbs(3);
        ProductQueryOptimizer optimizer = new ProductQueryOptimizer(16, 0.05f);
        BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter writer = new BufferedWriter(new FileWriter("e:/result.txt"));

        ProductQueryParam queryParam = makeParam();

        long begin = System.currentTimeMillis();
        System.out.println("?\t");
        ProductHits hits = (ProductHits) optimizer.optimize(searcher, queryParam);
        long end = System.currentTimeMillis();
        System.out.println("?:\t" + (end - begin));

        System.out.println("?:\t" + hits.getTotal());
        System.out.println("?:\t" + hits.getGrpHits());

        BooleanQuery original = QueryFilters.filter(queryParam.getQuery(), Constants.SLOP_SCORE_CVM_CLASS);
        ClusterBean[] trades = hits.getIndustryids();
        for (int i = 0; i < trades.length; i++) {
            System.out.println(trades[i].getId() + "\t" + trades[i].getNum());
        }
        Hit[] docs = hits.getHits();
        for (int i = 0; i < docs.length; i++) {
            writer.write(docs[i].getIndexDocNo() + "\n");
            Properties prop = searcher.getDetailSummary(docs[i].getIndexDocNo(), "", 1, 0);
            BitVector haspic = (BitVector) MemoryFieldCache.get("haspic");
            // System.out.println(prop);

            System.out.println(docs[i].getIndexDocNo() + "\t" + docs[i].getScore() + "\t"
                    + prop.getProperty("title") + "\t" + prop.getProperty("keyword") + "haspic:\t"
                    + haspic.get(docs[i].getIndexDocNo()) + "\tindustryid:\t" + prop.getProperty("industryid")
                    + "\t[" + prop.getProperty("spec") + "\t" + prop.getProperty("unit") + "\t"
                    + prop.getProperty("price") + "\t" + prop.getProperty("mincount") + "]"

            );
            // Explanation explain = searcher.explain(original,
            // docs[i].getIndexDocNo());
            // System.out.println(explain.toString());
        }
        writer.flush();
        // Thread.currentThread().join();
    }

    private static ProductQueryParam makeParam() {
        Query cnquery = new Query();
        // cnquery.addRequiredTerm("|1.0/?|3.0/", "DEFAULT", true);

        // cnquery.addRequiredTerm("?|1.0/|1.0/", "DEFAULT", true);
        // cnquery.addRequiredTerm("|8.526528/", "DEFAULT", true);
        // cnquery.addRequiredTerm("|1.0/|1.0/|1.0/|1.0/|1.0/|1.0/",
        // "DEFAULT", true);
        // cnquery.addRequiredTerm("?|1.0/?|1.0/", "DEFAULT", true);
        // cnquery.addRequiredTerm("vishayn|1.0/", "DEFAULT", true);

        /*
         * QUERY:+(+(((+anchor: +anchor: +anchor: +anchor: +anchor:
         * +anchor:? +anchor:? +anchor: +anchor: +anchor: +anchor:?
         * +anchor: +anchor: +anchor:)^200.0) ((+content: +content:
         * +content: +content: +content: +content:? +content:?
         * +content: +content: +content: +content:? +content: +content:
         * +content:)^5.0))) 08  2014 16:53:14 | QUERY_AND:-(+(+(((+anchor:
         * +anchor: +anchor: +anchor: +anchor: +anchor:? +anchor:?
         * +anchor: +anchor: +anchor: +anchor:? +anchor: +anchor:
         * +anchor:)^200.0) ((+content: +content: +content: +content:
         * +content: +content:? +content:? +content: +content:
         * +content: +content:? +content: +content: +content:)^5.0))))
         * +(+(((+anchor: +anchor:)^200.0) ((+content: +content:)^5.0)))
         */

        cnquery.addRequiredTerm("|1.0/", "DEFAULT", true);

        // cnquery.addRequiredTerm("|1.0/|1.0/|1.0/|1.0/|1.0/?|1.0/?|1.0/|1.0/|1.0/|1.0/?|1.0/|1.0/|1.0/",
        // "DEFAULT", true);
        // cnquery.addRequiredTerm("|1.0/|1.0/", "DEFAULT", true);
        // cnquery.addRequiredTerm("|1.0/|1.0/|1.0/|1.0/|1.0/?|1.0/?|1.0/|1.0/|1.0/|1.0/?|1.0/|1.0/|1.0/",
        // "DEFAULT", true);

        // cnquery.addRequiredTerm("?|1.0/|1.0/?|1.0/", "DEFAULT", true);
        // cnquery.addRequiredTerm("?|1.0/?|1.0/|1.0/", "DEFAULT", true);

        // cnquery.addRequiredTerm("|1.0/?|1.0/|1.0/|1.0/2|1.0/",
        // "DEFAULT", true);
        // cnquery.addRequiredTerm("|1.0/|1.0/?|1.0/|1.0/|1.0/?|1.0/",
        // "DEFAULT", true);
        // cnquery.addRequiredTerm("|1.0/|1.0/?|1.0/?|0.2/|1.0/|1.0/?|1.0/|1.0/",
        // "DEFAULT", true);
        // cnquery.addRequiredTerm("18863", "industryid", true);
        // cnquery.addRequiredTerm("14501", "industryid", true);
        ProductQueryParam param = new ProductQueryParam(cnquery);
        Query notQuery = new Query();
        // if (searchItem.getAttrKeyWord() != null &&
        // searchItem.getAttrKeyWord().trim().length() > 0) {
        // attrQuery = SearchQuery.parse(searchItem.getAttrKeyWord());
        // }
        param.setNotQuery(notQuery);
        param.setHitsNum(15);
        param.setSortType((byte) -1);
        param.setSearchType((byte) 1);
        param.setArea(-1);
        param.setProvince(-1);
        param.setCity(-1);
        param.setMemberLevel(-1);
        param.setCompanyLicense((byte) -1);
        param.setDatatype((byte) -1);
        param.setTradeLevel(1);
        param.setHaspic((byte) 0);

        return param;
    }

    public static String getTradeid(int[] ids) {
        String result = "";
        for (int i = 0; i < ids.length; i++) {
            result += " " + ids[i];
        }
        return result;
    }

    public static Map<String, String> getUpdateMap() {
        IProductUpdateBean updateBean = new ProductUpdateBeanImpl();
        updateBean.setProductid(217073);

        updateBean.setTradeid("1009792 1005218 1009000 1005200");
        updateBean.setMemlevel(3);
        updateBean.setState(1);
        updateBean.setIndustryid(10000);
        return getUpdateMap(updateBean);

    }

    private static Map<String, String> getUpdateMap(IProductUpdateBean updateBean) {

        Map<String, String> updateMemoryData = new HashMap<String, String>();

        if (updateBean.getTradeid() != null && updateBean.getTradeid().length() > 0) {
            updateMemoryData.put("tradeid", updateBean.getTradeid());
        }
        if (updateBean.getArea() != -1) {
            updateMemoryData.put("area", updateBean.getArea() + "");
        }
        if (updateBean.getCity() != -1) {
            updateMemoryData.put("city", updateBean.getCity() + "");
        }
        if (updateBean.getIndustryid() != -1) {
            updateMemoryData.put("industryid", updateBean.getIndustryid() + "");
        }
        if (updateBean.getLicense() != -1) {
            updateMemoryData.put("license", updateBean.getLicense() + "");
        }
        if (updateBean.getMemlevel() != -1) {
            updateMemoryData.put("memlevel", updateBean.getMemlevel() + "");
        }

        if (updateBean.getProvince() != -1) {
            updateMemoryData.put("province", updateBean.getProvince() + "");
        }
        if (updateBean.getUpdatedate() != null) {
            updateMemoryData.put("updatedate", updateBean.getUpdatedate().getTime() + "");
        }
        if (updateBean.getState() != -1) {
            updateMemoryData.put("state", updateBean.getState() + "");
        }
        return updateMemoryData;

    }
}