/** * 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; } }