com.senseidb.search.node.inmemory.InMemoryIndexPerfEval.java Source code

Java tutorial

Introduction

Here is the source code for com.senseidb.search.node.inmemory.InMemoryIndexPerfEval.java

Source

/**
 * This software is licensed to you under the Apache License, Version 2.0 (the
 * "Apache License").
 *
 * LinkedIn's contributions are made under the Apache License. If you contribute
 * to the Software, the contributions will be deemed to have been made under the
 * Apache License, unless you expressly indicate otherwise. Please do not make any
 * contributions that would be inconsistent with the Apache License.
 *
 * You may obtain a copy of the Apache License at http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, this software
 * distributed under the Apache License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache
 * License for the specific language governing permissions and limitations for the
 * software governed under the Apache License.
 *
 *  2012 LinkedIn Corp. All Rights Reserved.  
 */

package com.senseidb.search.node.inmemory;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import org.json.JSONObject;

import com.browseengine.bobo.api.BrowseSelection;
import com.browseengine.bobo.api.FacetSpec;
import com.browseengine.bobo.api.FacetSpec.FacetSortSpec;
import com.senseidb.search.req.SenseiRequest;

public class InMemoryIndexPerfEval {

    public static void main(String[] args) throws Exception {
        final InMemorySenseiService memorySenseiService = InMemorySenseiService.valueOf(
                new File(InMemoryIndexPerfEval.class.getClassLoader().getResource("test-conf/node1/").toURI()));

        final List<JSONObject> docs = new ArrayList<JSONObject>(15000);
        LineIterator lineIterator = FileUtils.lineIterator(
                new File(InMemoryIndexPerfEval.class.getClassLoader().getResource("data/test_data.json").toURI()));
        int i = 0;
        while (lineIterator.hasNext() && i < 100) {
            String car = lineIterator.next();
            if (car != null && car.contains("{"))
                docs.add(new JSONObject(car));
            i++;
        }
        Thread[] threads = new Thread[10];
        for (int k = 0; k < threads.length; k++) {
            threads[k] = new Thread(new Runnable() {
                public void run() {
                    long time = System.currentTimeMillis();
                    //System.out.println("Start thread");
                    for (int j = 0; j < 1000; j++) {
                        //System.out.println("Send request");
                        memorySenseiService.doQuery(getRequest(), docs);
                    }
                    System.out.println("time = " + (System.currentTimeMillis() - time));
                }
            });
            threads[k].start();
        }
        Thread.sleep(500000);
    }

    private static void setspec(SenseiRequest req, FacetSpec spec) {
        req.setFacetSpec("color", spec);
        req.setFacetSpec("category", spec);
        req.setFacetSpec("city", spec);
        req.setFacetSpec("makemodel", spec);
        req.setFacetSpec("year", spec);
        req.setFacetSpec("price", spec);
        req.setFacetSpec("mileage", spec);
        req.setFacetSpec("tags", spec);
    }

    public static SenseiRequest getRequest() {
        FacetSpec facetSpecall = new FacetSpec();
        facetSpecall.setMaxCount(1000000);
        facetSpecall.setExpandSelection(true);
        facetSpecall.setMinHitCount(0);
        facetSpecall.setOrderBy(FacetSortSpec.OrderHitsDesc);
        FacetSpec facetSpec = new FacetSpec();
        facetSpec.setMaxCount(5);
        SenseiRequest req = new SenseiRequest();
        req.setCount(3);
        facetSpecall.setMaxCount(3);
        setspec(req, facetSpecall);
        BrowseSelection sel = new BrowseSelection("year");
        String selVal = "[2001 TO 2002]";
        sel.addValue(selVal);
        req.addSelection(sel);
        return req;
    }
}