/** * 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.test.client; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.json.JSONObject; import com.senseidb.search.client.SenseiServiceProxy; import com.senseidb.search.client.json.JsonSerializer; import com.senseidb.search.client.req.Facet; import com.senseidb.search.client.req.FacetInit; import com.senseidb.search.client.req.FacetType; import com.senseidb.search.client.req.Operator; import com.senseidb.search.client.req.Selection; import com.senseidb.search.client.req.SenseiClientRequest; import com.senseidb.search.client.req.Sort; import com.senseidb.search.client.req.filter.Filters; import com.senseidb.search.client.req.query.Queries; import com.senseidb.search.client.req.query.Query; import com.senseidb.search.client.req.query.TextQuery.Type; import com.senseidb.search.client.res.SenseiResult; public class Examples { public static void main(String[] args) throws Exception { //Equivalent to //SELECT color, year, tags, price FROM cars WHERE QUERY IS "cool" AND tags //CONTAINS ALL ("cool", "hybrid") EXCEPT ("favorite") AND color in ("red") //ORDER BY price desc LIMIT 0,10 BROWSE BY color(true, 1, 10, hits), year(true, 1, 10, value), price SenseiClientRequest senseiRequest = SenseiClientRequest.builder() .addFacet("color", Facet.builder().minHit(1).expand(true).orderByHits().max(10).addProperty("maxFacetsPerKey", "3").build()) //.addFacet("price", Facet.builder().minHit(1).expand(false).orderByHits().max(10).build()) .addFacet("year", Facet.builder().minHit(1).expand(true).orderByVal().max(10).build()) .query(Queries.stringQuery("cool")) .addSelection(Selection.terms("tags", Arrays.asList("cool", "hybrid"), Arrays.asList("favorite"), Operator.and)) .addSelection(Selection.terms("color", Arrays.asList("red"), new ArrayList<String>(), Operator.or)) .paging(10, 0) .fetchStored(true) .addSort(Sort.desc("price")) .build(); JSONObject serialized = (JSONObject) JsonSerializer.serialize(senseiRequest); System.out.println(serialized.toString(2)); SenseiResult senseiResult = new SenseiServiceProxy("localhost", 8080).sendSearchRequest(senseiRequest); System.out.println(senseiResult); } public static SenseiClientRequest.Builder basicWithSelections(SenseiClientRequest.Builder builder) { builder.paging(5, 2) .groupBy(7, "car", "year") .addSelection(Selection.path("field", "value", true, 1)) .addSelection(Selection.range("color", "*", "*")) .addFacet("facet1", Facet.builder().max(2).minHit(1).orderByVal().build()) .addFacetInit("name", "parameter", FacetInit.build(FacetType.type_double, "val1", "val2")) .addTermVector("Term1") .explain(true) .partitions(Arrays.asList(1,2)) ; return builder; } public static SenseiClientRequest.Builder filters(SenseiClientRequest.Builder builder) { builder.filter(Filters.or( Filters.and( Filters.boolMust(Filters.or(Filters.term("field", "value"))), Filters.and( Filters.or(Filters.term("field", "value"), Filters.terms("Field", Arrays.asList("a","b"), Arrays.asList("a","b"), Operator.or) ) ), Filters.ids(Arrays.asList("val2", "val3"), Arrays.asList("ExcludedValue")), Filters.range("field1", "*", "*")), Filters.or(Filters.ids(Arrays.asList("val2", "val3"), Arrays.asList("ExcludedValue")), Filters.range("field1", "*", "*", true, true)), Filters.ids(Arrays.asList("val2", "val3"), Arrays.asList("ExcludedValue")), Filters.term("field", "value"), Filters.boolShould(Filters.or(Filters.term("field", "value"))))); return builder; } public static SenseiClientRequest.Builder queries(SenseiClientRequest.Builder builder) { List<Query> innerQueries = Arrays.asList( Queries.matchAllQuery(3), Queries.disMax(2.0, 1.0, Queries.term("field1", "value1", 1.0)), Queries.ids(Arrays.asList("val2", "val3"), Arrays.asList("ExcludedValue"), 1.0), Queries.matchAllQuery(3.0), Queries.path("field", "/path1/path2", 1.0), Queries.prefix("field", "prefix", 2.0), Queries.wildcard("field", "wildcard", 3.0), Queries.spanFirst(Queries.spanTerm("field", "val", 3.5), 3, 1.0), Queries.spanNear(Arrays.asList(Queries.spanTerm("field", "val", 3.5)), 3, true, true, 1.0), Queries.spanNot(Queries.spanTerm("field", "val", 3.5), Queries.spanTerm("field", "val2", 3.5), 1.0), Queries.spanOr( 1.0, Queries.spanTerm("field", "val", 3.5)), Queries.spanTerm("field", "val", 3.5), Queries.textQuery("column","text", Operator.or, Type.phrase, 1.0), Queries.stringQueryBuilder().query("").autoGeneratePhraseQueries(true).defaultField("field").defaultOperator(Operator.and).fields("field1","field2").tieBreaker(2).build() ); builder.query(Queries.bool(innerQueries, null, null, 2, 2.0, true)); return builder; } public static SenseiClientRequest.Builder mapReduce(SenseiClientRequest.Builder builder) { Map<String, Object> params = new HashMap<String, Object>(); params.put("column", "price"); builder.mapReduce("com.senseidb.search.req.mapred.functions.MinMapReduce", params).build(); return builder; } }