/* * Copyright (c) 2011 LinkedIn, Inc * * Licensed 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 com.flaptor.indextank.rpc; import java.util.Map; import java.util.Map.Entry; import org.apache.thrift.TException; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransportException; import com.google.common.collect.Maps; public class IndexerClient implements com.flaptor.indextank.BoostingIndexer { private final String host; private final int port; public IndexerClient(String host, int port) { this.host = host; this.port = port; } @Override public void promoteResult(String docid, String query) { TSocket transport = new TSocket(host, port); TProtocol protocol = new TBinaryProtocol(transport); Indexer.Client client = new Indexer.Client(protocol); try { transport.open(); client.promoteResult(docid, query); transport.close(); } catch (IndextankException e) { throw new RuntimeException(e); } catch (TTransportException e) { throw new RuntimeException(e); } catch (TException e) { throw new RuntimeException(e); } } @Override public void add(String docId, com.flaptor.indextank.index.Document document, int timestampBoost, Map<Integer, Double> dynamicBoosts) { TSocket transport = new TSocket(host, port); TProtocol protocol = new TBinaryProtocol(transport); Indexer.Client client = new Indexer.Client(protocol); try { transport.open(); client.addDoc(docId, new Document(document.asMap()), timestampBoost, dynamicBoosts); transport.close(); } catch (IndextankException e) { throw new RuntimeException(e); } catch (TTransportException e) { throw new RuntimeException(e); } catch (TException e) { throw new RuntimeException(e); } } @Override public void dump() { TSocket transport = new TSocket(host, port); TProtocol protocol = new TBinaryProtocol(transport); Indexer.Client client = new Indexer.Client(protocol); try { transport.open(); client.dump(); transport.close(); } catch (IndextankException e) { throw new RuntimeException(e); } catch (TTransportException e) { throw new RuntimeException(e); } catch (TException e) { throw new RuntimeException(e); } } @Override public void updateBoosts(String docId, Map<Integer, Double> updatedBoosts) { TSocket transport = new TSocket(host, port); TProtocol protocol = new TBinaryProtocol(transport); Indexer.Client client = new Indexer.Client(protocol); try { transport.open(); client.updateBoost(docId, updatedBoosts); transport.close(); } catch (IndextankException e) { throw new RuntimeException(e); } catch (TTransportException e) { throw new RuntimeException(e); } catch (TException e) { throw new RuntimeException(e); } } @Override public void updateCategories(String docId, Map<String, String> categories) { TSocket transport = new TSocket(host, port); TProtocol protocol = new TBinaryProtocol(transport); Indexer.Client client = new Indexer.Client(protocol); try { transport.open(); client.updateCategories(docId, categories); transport.close(); } catch (IndextankException e) { throw new RuntimeException(e); } catch (TTransportException e) { throw new RuntimeException(e); } catch (TException e) { throw new RuntimeException(e); } } @Override public void updateTimestamp(String docId, int timestampBoost) { TSocket transport = new TSocket(host, port); TProtocol protocol = new TBinaryProtocol(transport); Indexer.Client client = new Indexer.Client(protocol); try { transport.open(); client.updateTimestampBoost(docId, timestampBoost); transport.close(); } catch (IndextankException e) { throw new RuntimeException(e); } catch (TTransportException e) { throw new RuntimeException(e); } catch (TException e) { throw new RuntimeException(e); } } @Override public void del(String docid) { TSocket transport = new TSocket(host, port); TProtocol protocol = new TBinaryProtocol(transport); Indexer.Client client = new Indexer.Client(protocol); try { transport.open(); client.delDoc(docid); transport.close(); } catch (IndextankException e) { throw new RuntimeException(e); } catch (TTransportException e) { throw new RuntimeException(e); } catch (TException e) { throw new RuntimeException(e); } } @Override public void addScoreFunction(int functionIndex, String definition) { TSocket transport = new TSocket(host, port); TProtocol protocol = new TBinaryProtocol(transport); Indexer.Client client = new Indexer.Client(protocol); try { transport.open(); client.addScoreFunction(functionIndex, definition); transport.close(); } catch (IndextankException e) { throw new RuntimeException(e); } catch (TTransportException e) { throw new RuntimeException(e); } catch (TException e) { throw new RuntimeException(e); } } @Override public void removeScoreFunction(int functionIndex) { TSocket transport = new TSocket(host, port); TProtocol protocol = new TBinaryProtocol(transport); Indexer.Client client = new Indexer.Client(protocol); try { transport.open(); client.removeScoreFunction(functionIndex); transport.close(); } catch (IndextankException e) { throw new RuntimeException(e); } catch (TTransportException e) { throw new RuntimeException(e); } catch (TException e) { throw new RuntimeException(e); } } @Override public Map<Integer,String> listScoreFunctions() { TSocket transport = new TSocket(host, port); TProtocol protocol = new TBinaryProtocol(transport); Indexer.Client client = new Indexer.Client(protocol); try { transport.open(); Map<Integer,String> retValue = client.listScoreFunctions(); transport.close(); return retValue; } catch (IndextankException e) { throw new RuntimeException(e); } catch (TTransportException e) { throw new RuntimeException(e); } catch (TException e) { throw new RuntimeException(e); } } @Override public Map<String, String> getStats() { TSocket transport = new TSocket(host, port); TProtocol protocol = new TBinaryProtocol(transport); Indexer.Client client = new Indexer.Client(protocol); try { transport.open(); Map<String,String> retValue = client.get_stats(); transport.close(); return retValue; } catch (IndextankException e) { throw new RuntimeException(e); } catch (TTransportException e) { throw new RuntimeException(e); } catch (TException e) { throw new RuntimeException(e); } } public static void main(String[] args) { IndexerClient client = new IndexerClient("localhost", 7911); Map<String,String> fields = Maps.newHashMap(); fields.put("mono","lete"); fields.put("ignacio","perez"); fields.put("santi","miente"); fields.put("jorge","grumpy"); fields.put("spike","sweet"); String extra = ""; if (args.length > 1 ) { fields.put(args[0],args[1]); extra = args[0] + " " + args[1]; } fields.put("todo","mono lete ignacio perez santi miente jorge grumpy spike y sweet " + extra); com.flaptor.indextank.index.Document doc = new com.flaptor.indextank.index.Document(fields); client.add("prueba", doc, (int)(System.currentTimeMillis() / 1000), Maps.<Integer, Double>newHashMap()); } }