From 2de01ecb76eefeac4b8cd52ed9021d8b1eda883f Mon Sep 17 00:00:00 2001 From: Leandro Oniszczuk Date: Thu, 23 Jun 2011 15:34:07 -0300 Subject: [PATCH 01/15] Index can get public search api status --- src/main/java/com/flaptor/indextank/apiclient/Index.java | 3 +++ .../com/flaptor/indextank/apiclient/IndexTankClient.java | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/com/flaptor/indextank/apiclient/Index.java b/src/main/java/com/flaptor/indextank/apiclient/Index.java index 7f21f3e..8c15d33 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/Index.java +++ b/src/main/java/com/flaptor/indextank/apiclient/Index.java @@ -216,10 +216,13 @@ Map listFunctions() throws IndexDoesNotExistException, String getCode() throws IOException, IndexDoesNotExistException; Date getCreationTime() throws IOException, IndexDoesNotExistException; + + boolean isPublicSearchEnabled() throws IOException, IndexDoesNotExistException; void refreshMetadata() throws IOException, IndexDoesNotExistException; Map getMetadata() throws IOException, IndexDoesNotExistException; + } diff --git a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java index 21135bb..c09054e 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java +++ b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java @@ -1064,6 +1064,11 @@ public Date getCreationTime() throws IOException, } } + @Override + public boolean isPublicSearchEnabled() throws IOException, IndexDoesNotExistException { + return (Boolean)getMetadata().get("public_search"); + } + @Override public void refreshMetadata() throws IOException, IndexDoesNotExistException { From 373bc2871d83a94f519d25fe02096366bf52104b Mon Sep 17 00:00:00 2001 From: Leandro Oniszczuk Date: Thu, 23 Jun 2011 15:55:39 -0300 Subject: [PATCH 02/15] When creating indexes, sending empty body is the default behavior --- .../com/flaptor/indextank/apiclient/ApiClient.java | 2 +- .../java/com/flaptor/indextank/apiclient/Index.java | 4 ++-- .../flaptor/indextank/apiclient/IndexTankClient.java | 12 +++++++----- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/flaptor/indextank/apiclient/ApiClient.java b/src/main/java/com/flaptor/indextank/apiclient/ApiClient.java index 2a29a26..30a6c0b 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/ApiClient.java +++ b/src/main/java/com/flaptor/indextank/apiclient/ApiClient.java @@ -13,7 +13,7 @@ public interface ApiClient { Index createIndex(String indexName) throws IOException, IndexAlreadyExistsException, MaximumIndexesExceededException; - Index createIndex(String indexName, boolean publicSearch) throws IOException, + Index createIndex(String indexName, Boolean publicSearch) throws IOException, IndexAlreadyExistsException, MaximumIndexesExceededException; void deleteIndex(String indexName) throws IOException, diff --git a/src/main/java/com/flaptor/indextank/apiclient/Index.java b/src/main/java/com/flaptor/indextank/apiclient/Index.java index 8c15d33..c4056b5 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/Index.java +++ b/src/main/java/com/flaptor/indextank/apiclient/Index.java @@ -17,13 +17,13 @@ IndexTankClient.SearchResults search(IndexTankClient.Query query) throws IOExcep * Creates this index. * * @param publicSearch - * enable public search for this index + * enable public search for this index. if null, public search will be disabled. * @throws IndexAlreadyExistsException * If it already existed * @throws MaximumIndexesExceededException * If the account has reached the limit */ - void create(boolean publicSearch) throws IOException, IndexAlreadyExistsException, + void create(Boolean publicSearch) throws IOException, IndexAlreadyExistsException, MaximumIndexesExceededException; /** diff --git a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java index c09054e..153e9ac 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java +++ b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java @@ -706,14 +706,16 @@ public SearchResults search(Query query) throws IOException, @Override public void create() throws IOException, IndexAlreadyExistsException, MaximumIndexesExceededException { - this.create(false); + this.create(null); } @Override - public void create(boolean publicSearch) throws IOException, IndexAlreadyExistsException, + public void create(Boolean publicSearch) throws IOException, IndexAlreadyExistsException, MaximumIndexesExceededException { Map data = new HashMap(); - data.put("public_search", publicSearch); + if (publicSearch != null) { + data.put("public_search", publicSearch); + } try { callAPI(PUT_METHOD, indexUrl, null, data, privatePass); } catch (HttpCodeException e) { @@ -1135,11 +1137,11 @@ public Index getIndex(String indexName) { @Override public Index createIndex(String indexName) throws IOException, IndexAlreadyExistsException, MaximumIndexesExceededException { - return this.createIndex(indexName, false); + return this.createIndex(indexName, null); } @Override - public Index createIndex(String indexName, boolean publicSearch) throws IOException, + public Index createIndex(String indexName, Boolean publicSearch) throws IOException, IndexAlreadyExistsException, MaximumIndexesExceededException { Index index = getIndex(indexName); index.create(publicSearch); From 78aa405f383682e8c44a2071f95f0c59651fee89 Mon Sep 17 00:00:00 2001 From: Leandro Oniszczuk Date: Thu, 23 Jun 2011 19:45:18 -0300 Subject: [PATCH 03/15] Update index configuration. Create IndexConfiguration object to create or update index. Creating index without configuration sends a request without body. Remove createIndex with boolean parameter. Not backward compatible --- .../indextank/apiclient/ApiClient.java | 3 +- .../flaptor/indextank/apiclient/Index.java | 17 +++++- .../IndexAlreadyExistsException.java | 5 ++ .../apiclient/IndexDoesNotExistException.java | 5 ++ .../indextank/apiclient/IndexTankClient.java | 60 ++++++++++++++++--- 5 files changed, 79 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/flaptor/indextank/apiclient/ApiClient.java b/src/main/java/com/flaptor/indextank/apiclient/ApiClient.java index 30a6c0b..2397636 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/ApiClient.java +++ b/src/main/java/com/flaptor/indextank/apiclient/ApiClient.java @@ -4,6 +4,7 @@ import java.util.List; import com.flaptor.indextank.apiclient.IndexTankClient.Index; +import com.flaptor.indextank.apiclient.IndexTankClient.IndexConfiguration; public interface ApiClient { @@ -13,7 +14,7 @@ public interface ApiClient { Index createIndex(String indexName) throws IOException, IndexAlreadyExistsException, MaximumIndexesExceededException; - Index createIndex(String indexName, Boolean publicSearch) throws IOException, + Index createIndex(String indexName, IndexConfiguration conf) throws IOException, IndexAlreadyExistsException, MaximumIndexesExceededException; void deleteIndex(String indexName) throws IOException, diff --git a/src/main/java/com/flaptor/indextank/apiclient/Index.java b/src/main/java/com/flaptor/indextank/apiclient/Index.java index c4056b5..39c089e 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/Index.java +++ b/src/main/java/com/flaptor/indextank/apiclient/Index.java @@ -4,6 +4,8 @@ import java.util.Date; import java.util.Map; +import com.flaptor.indextank.apiclient.IndexTankClient.IndexConfiguration; + public interface Index { @@ -23,9 +25,9 @@ IndexTankClient.SearchResults search(IndexTankClient.Query query) throws IOExcep * @throws MaximumIndexesExceededException * If the account has reached the limit */ - void create(Boolean publicSearch) throws IOException, IndexAlreadyExistsException, - MaximumIndexesExceededException; - + void create(IndexConfiguration conf) throws IOException, IndexAlreadyExistsException, + MaximumIndexesExceededException; + /** * Creates this index. * @@ -39,6 +41,15 @@ void create(Boolean publicSearch) throws IOException, IndexAlreadyExistsExceptio void create() throws IOException, IndexAlreadyExistsException, MaximumIndexesExceededException; + + /** + * Update this index. + * + * @throws IndexDoesNotExistException* + * if the index does not exist + */ + void update(IndexConfiguration conf) throws IOException, IndexDoesNotExistException; + /** * Delete this index * diff --git a/src/main/java/com/flaptor/indextank/apiclient/IndexAlreadyExistsException.java b/src/main/java/com/flaptor/indextank/apiclient/IndexAlreadyExistsException.java index ba3b492..a6b9ffb 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/IndexAlreadyExistsException.java +++ b/src/main/java/com/flaptor/indextank/apiclient/IndexAlreadyExistsException.java @@ -4,6 +4,11 @@ public class IndexAlreadyExistsException extends Exception { + + public IndexAlreadyExistsException(String message) { + super(message); + } + public IndexAlreadyExistsException(HttpCodeException source) { super(source.getMessage()); } diff --git a/src/main/java/com/flaptor/indextank/apiclient/IndexDoesNotExistException.java b/src/main/java/com/flaptor/indextank/apiclient/IndexDoesNotExistException.java index bdf316b..5dddb46 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/IndexDoesNotExistException.java +++ b/src/main/java/com/flaptor/indextank/apiclient/IndexDoesNotExistException.java @@ -4,7 +4,12 @@ public class IndexDoesNotExistException extends Exception { + public IndexDoesNotExistException(HttpCodeException source) { super(source.getMessage()); } + + public IndexDoesNotExistException(String message) { + super(message); + } } diff --git a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java index 153e9ac..9ccd42d 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java +++ b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java @@ -532,6 +532,21 @@ public static String join(Iterable s, String delimiter) { } + public static class IndexConfiguration { + protected Boolean publicSearch; + + public IndexConfiguration enablePublicSearch(Boolean publicSearchEnabled) { + this.publicSearch = publicSearchEnabled; + return this; + } + + protected Map toConfigurationMap() { + HashMap conf = new HashMap(); + if (this.publicSearch != null) conf.put("public_search", this.publicSearch); + return conf; + } + } + private static final String GET_METHOD = "GET"; private static final String PUT_METHOD = "PUT"; private static final String DELETE_METHOD = "DELETE"; @@ -710,12 +725,16 @@ public void create() throws IOException, IndexAlreadyExistsException, } @Override - public void create(Boolean publicSearch) throws IOException, IndexAlreadyExistsException, + public void create(IndexConfiguration conf) throws IOException, IndexAlreadyExistsException, MaximumIndexesExceededException { - Map data = new HashMap(); - if (publicSearch != null) { - data.put("public_search", publicSearch); - } + + if (this.exists()) + throw new IndexAlreadyExistsException("Index already exists"); + + Map data = null; + if (conf != null) + data = conf.toConfigurationMap(); + try { callAPI(PUT_METHOD, indexUrl, null, data, privatePass); } catch (HttpCodeException e) { @@ -729,6 +748,33 @@ public void create(Boolean publicSearch) throws IOException, IndexAlreadyExistsE } } + @Override + public void update(IndexConfiguration conf) throws IndexDoesNotExistException, IOException { + + if (conf == null) + throw new IllegalArgumentException("Index configuration must not be null"); + + Map data = conf.toConfigurationMap(); + + if (data.size() == 0) + throw new IllegalArgumentException("Index configuration is empty."); + + if (!this.exists()) + throw new IndexDoesNotExistException("Index does not exist"); + + try { + callAPI(PUT_METHOD, indexUrl, null, data, privatePass); + } catch (HttpCodeException e) { + if (e.getHttpCode() == 204) { + this.refreshMetadata(); + return; + } else { + throw new UnexpectedCodeException(e); + } + } + } + + @Override public void delete() throws IOException, IndexDoesNotExistException { try { @@ -1141,10 +1187,10 @@ public Index createIndex(String indexName) throws IOException, } @Override - public Index createIndex(String indexName, Boolean publicSearch) throws IOException, + public Index createIndex(String indexName, IndexConfiguration conf) throws IOException, IndexAlreadyExistsException, MaximumIndexesExceededException { Index index = getIndex(indexName); - index.create(publicSearch); + index.create(conf); return index; } From c131f7d4ced2930a0269b5916a304285103ea276 Mon Sep 17 00:00:00 2001 From: Leandro Oniszczuk Date: Wed, 29 Jun 2011 14:17:21 -0300 Subject: [PATCH 04/15] Merge delete by query --- src/main/java/com/flaptor/indextank/apiclient/Index.java | 2 ++ .../com/flaptor/indextank/apiclient/IndexTankClient.java | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/flaptor/indextank/apiclient/Index.java b/src/main/java/com/flaptor/indextank/apiclient/Index.java index d8630e4..b559a61 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/Index.java +++ b/src/main/java/com/flaptor/indextank/apiclient/Index.java @@ -229,6 +229,8 @@ Map listFunctions() throws IndexDoesNotExistException, * @throws IOException */ boolean hasStarted() throws IOException, IndexDoesNotExistException; + + String getStatus() throws IOException, IndexDoesNotExistException; String getCode() throws IOException, IndexDoesNotExistException; diff --git a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java index 59746ee..7468fc9 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java +++ b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java @@ -1113,13 +1113,17 @@ public boolean exists() throws IOException { } @Override - public boolean hasStarted() throws IOException, - IndexDoesNotExistException { + public boolean hasStarted() throws IOException, IndexDoesNotExistException { refreshMetadata(); return (Boolean) getMetadata().get("started"); } + @Override + public String getStatus() throws IOException, IndexDoesNotExistException { + return (String) getMetadata().get("status"); + } + @Override public String getCode() throws IOException, IndexDoesNotExistException { return (String) getMetadata().get("code"); From 7cfef2862856ca7b891384fe5c3b879864b06d72 Mon Sep 17 00:00:00 2001 From: Leandro Oniszczuk Date: Wed, 29 Jun 2011 14:19:26 -0300 Subject: [PATCH 05/15] [maven-release-plugin] prepare release indextank-java-1.0.8 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3f82685..6f97732 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ indextank-java jar Indextank Java Client - 1.0.8-SNAPSHOT + 1.0.8 Java client for Indextank search engine http://www.indextank.com From 2df27f28cfa56e191644a0e76eb6678e340424c1 Mon Sep 17 00:00:00 2001 From: Leandro Oniszczuk Date: Wed, 29 Jun 2011 14:19:37 -0300 Subject: [PATCH 06/15] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6f97732..235e29d 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ indextank-java jar Indextank Java Client - 1.0.8 + 1.0.9-SNAPSHOT Java client for Indextank search engine http://www.indextank.com From e1c9fe35f87abc03b4869ee36f2570bfb43978c8 Mon Sep 17 00:00:00 2001 From: Leandro Oniszczuk Date: Thu, 30 Jun 2011 14:31:57 -0300 Subject: [PATCH 07/15] Add generic main method for the java client Usage: java -jar indextank.jar [config|index|search] options it allows to create an index, index basic documents and search for them with simple queries. --- build.xml | 2 + .../indextank/apiclient/IndexTankMain.java | 220 ++++++++++++++++++ 2 files changed, 222 insertions(+) create mode 100644 src/main/java/com/flaptor/indextank/apiclient/IndexTankMain.java diff --git a/build.xml b/build.xml index 62d10d6..74514cc 100644 --- a/build.xml +++ b/build.xml @@ -36,6 +36,7 @@ + @@ -64,6 +65,7 @@ + diff --git a/src/main/java/com/flaptor/indextank/apiclient/IndexTankMain.java b/src/main/java/com/flaptor/indextank/apiclient/IndexTankMain.java new file mode 100644 index 0000000..ec36c9c --- /dev/null +++ b/src/main/java/com/flaptor/indextank/apiclient/IndexTankMain.java @@ -0,0 +1,220 @@ +package com.flaptor.indextank.apiclient; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Reader; +import java.io.Writer; +import java.util.Map; +import java.util.Properties; + +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import com.flaptor.indextank.apiclient.IndexTankClient.Index; +import com.flaptor.indextank.apiclient.IndexTankClient.Query; +import com.flaptor.indextank.apiclient.IndexTankClient.SearchResults; + +public class IndexTankMain { + + private static final String INDEX_NAME = "index"; + private static final String APIURL = "apiurl"; + private static final String INDEXTANK_CONFIG_FILENAME = "indextank.config"; + + /** + * @param args + */ + public static void main(String[] args) { + if (args.length > 0) { + if ("config".equals(args[0])) { + if (args.length != 3){ + printUsage(); + System.exit(1); + } + config(args[1], args[2]); + } else if ("search".equals(args[0])) { + if (args.length < 2 || args.length > 4){ + printUsage(); + System.exit(1); + } + String query = args[1]; + int start = args.length > 2 ? Integer.parseInt(args[2]) : 0; + int length = args.length > 3 ? Integer.parseInt(args[3]) : 10; + + search(query, start, length); + + } else if ("index".equals(args[0])) { + try { + if (args.length != 3) { + printUsage(); + System.exit(1); + } + JSONParser parser = new JSONParser(); + Map fields = (Map) parser.parse(args[2]); + index(args[1], fields); + } catch (ParseException e) { + System.err.println("Invalid json map."); + e.printStackTrace(); + System.exit(1); + } + + } else { + printUsage(); + System.exit(1); + } + } else { + printUsage(); + System.exit(1); + } + } + + private static void printUsage() { + System.out.println("Usage options:\n"); + System.out.println("java -jar indextank.jar [config|index|search] options"); + System.out.println("config options: "); + System.out.println("index options: "); + System.out.println("search options: [start] [length]"); + System.out.println(); + System.out.println("fields: a json map with fields for this document"); + System.out.println("start,length: optional parameters"); + } + + private static void config(String apiUrl, String indexName) { + IndexTankClient client = new IndexTankClient(apiUrl); + Index index = client.getIndex(indexName); + + try { + System.out.println("Creating index " + indexName); + if (index.exists()) { + System.out.println("You already have an index called " + indexName + "." + + "\nThis process will delete this index and all your documents will be lost." + + "\nDo you want to continue (Y/n)?"); + char response = (char)System.in.read(); + if (response != 'y' && response != 'Y' && response != '\n') { + System.out.println("Aborting"); + System.exit(1); + } + + index.delete(); + } + + index.create(); + System.out.println("Index created."); + System.out.println("Saving configuration to indextank.config file"); + + File configFile = new File(INDEXTANK_CONFIG_FILENAME); + if (configFile.exists()) + configFile.delete(); + + boolean created = configFile.createNewFile(); + if (!created) { + System.err.println("Couldn't create config file"); + System.exit(1); + } + + Properties prop = new Properties(); + prop.setProperty(APIURL, apiUrl); + prop.setProperty(INDEX_NAME, indexName); + Writer writer = new FileWriter(configFile); + prop.store(writer, "IndexTank configuration. Do not remove this file if you want to try search and index options"); + writer.close(); + + System.out.println("Configuration successfully finished."); + + } catch (IOException e) { + System.err.println("Unexpected exception"); + e.printStackTrace(); + } catch (IndexDoesNotExistException e) { + System.err.println("Unexpected exception"); + e.printStackTrace(); + } catch (IndexAlreadyExistsException e) { + System.err.println("Unexpected exception"); + e.printStackTrace(); + } catch (MaximumIndexesExceededException e) { + System.err.println("Max quantity of index reached. Please delete any index in your account to continue with this configuration."); + } + } + + private static void search(String query, int start, int length) { + + System.out.println("Reading configuration file"); + File configFile = new File(INDEXTANK_CONFIG_FILENAME); + if (!configFile.exists() || !configFile.canRead()) { + System.err.println("File " + INDEXTANK_CONFIG_FILENAME + "doesn't exist or can't be read."); + System.err.println("Aborting"); + System.exit(1); + } + + try { + + Properties prop = new Properties(); + Reader reader = new FileReader(configFile); + prop.load(reader); + reader.close(); + + IndexTankClient client = new IndexTankClient(prop.getProperty(APIURL)); + Index index = client.getIndex(prop.getProperty(INDEX_NAME)); + + if (!index.exists()) { + System.err.println("Index " + prop.getProperty(INDEX_NAME) + " doesn't exist. Please run 'config' option first"); + System.exit(1); + } + + System.out.println("Searching for:\n query: " + query + "\n start:" + start + "\n length:" + length); + SearchResults results = index.search(Query.forString(query).withStart(start).withLength(length)); + System.out.println(results); + + } catch (FileNotFoundException e) { + System.err.println("Unexpected exception"); + e.printStackTrace(); + } catch (IOException e) { + System.err.println("Unexpected exception"); + e.printStackTrace(); + } catch (InvalidSyntaxException e) { + System.err.println("Unexpected exception"); + e.printStackTrace(); + } + } + + private static void index(String docid, Map fields) { + System.out.println("Reading configuration file"); + File configFile = new File(INDEXTANK_CONFIG_FILENAME); + if (!configFile.exists() || !configFile.canRead()) { + System.err.println("File " + INDEXTANK_CONFIG_FILENAME + "doesn't exist or can't be read."); + System.err.println("Aborting"); + System.exit(1); + } + + try { + + Properties prop = new Properties(); + Reader reader = new FileReader(configFile); + prop.load(reader); + reader.close(); + + IndexTankClient client = new IndexTankClient(prop.getProperty(APIURL)); + Index index = client.getIndex(prop.getProperty(INDEX_NAME)); + + if (!index.exists()) { + System.err.println("Index " + prop.getProperty(INDEX_NAME) + " doesn't exist. Please run 'config' option first"); + System.exit(1); + } + + System.out.println("Indexing document:\n id: " + docid + "\n fields:" + fields); + index.addDocument(docid, fields); + System.out.println("Document indexed successfully."); + + } catch (FileNotFoundException e) { + System.err.println("Unexpected exception"); + e.printStackTrace(); + } catch (IOException e) { + System.err.println("Unexpected exception"); + e.printStackTrace(); + } catch (IndexDoesNotExistException e) { + System.err.println("Unexpected exception"); + e.printStackTrace(); + } + } +} From ad4123f7776c5032494b91be512298db6a78201b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n?= Date: Thu, 11 Aug 2011 12:48:42 -0300 Subject: [PATCH 08/15] Add fetch_variables, fetch_categories --- .../indextank/apiclient/IndexTankClient.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java index 7468fc9..d132f51 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java +++ b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java @@ -328,6 +328,8 @@ public String getValue() { protected List documentVariableFilters; protected Map queryVariables; protected String queryString; + protected String fetchCategories; + protected String fetchVariables; public static Query forString(String query) { return new Query(query); @@ -369,7 +371,17 @@ public Query withSnippetFields(List snippetFields) { public Query withSnippetFields(String... snippetFields) { return withSnippetFields(Arrays.asList(snippetFields)); } - + + public Query withFetchCategories() { + this.fetchCategories = "*"; + return this; + } + + public Query withFetchVariables() { + this.fetchVariables = "*"; + return this; + } + public Query withFetchFields(List fetchFields) { if (fetchFields == null) { throw new NullPointerException("fetchFields must be non-null"); @@ -468,6 +480,10 @@ ParameterMap toParameterMap() { params.put("snippet", join(snippetFields, ",")); if (fetchFields != null) params.put("fetch", join(fetchFields, ",")); + if (fetchCategories != null) + params.put("fetch_categories", fetchCategories); + if (fetchVariables != null) + params.put("fetch_variables", fetchVariables); if (categoryFilters != null) params.put("category_filters", JSONObject.toJSONString(categoryFilters)); From 598de1b47051af6c3d2c0bb4e8ded55ec5807760 Mon Sep 17 00:00:00 2001 From: Adrian Date: Thu, 11 Aug 2011 14:49:56 -0300 Subject: [PATCH 09/15] Add didyoumean to results --- .../java/com/flaptor/indextank/apiclient/IndexTankClient.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java index d132f51..76e414b 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java +++ b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java @@ -273,12 +273,15 @@ public static class SearchResults { public final float searchTime; public final List> results; public final Map> facets; + public final String didYouMean; public SearchResults(Map response) { matches = (Long) response.get("matches"); searchTime = Float.valueOf((String) response.get("search_time")); results = (List>) response.get("results"); facets = (Map>) response.get("facets"); + Object didYouMean = response.get("didyoumean"); + this.didYouMean = (didYouMean != null)? didYouMean.toString() : null; } @Override From 8b62dd0de99ed0538e40088570f3254806ebd20b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n?= Date: Thu, 11 Aug 2011 15:17:30 -0300 Subject: [PATCH 10/15] [maven-release-plugin] prepare release indextank-java-1.0.9 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 235e29d..5c38f02 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ indextank-java jar Indextank Java Client - 1.0.9-SNAPSHOT + 1.0.9 Java client for Indextank search engine http://www.indextank.com From 04c59522d275182ee37ca1625c021968119394b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n?= Date: Thu, 11 Aug 2011 15:17:38 -0300 Subject: [PATCH 11/15] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5c38f02..8173ba8 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ indextank-java jar Indextank Java Client - 1.0.9 + 1.0.10-SNAPSHOT Java client for Indextank search engine http://www.indextank.com From a6494e3c3e0855d922b80621819ecc782c26c7af Mon Sep 17 00:00:00 2001 From: Ignacio Perez Date: Fri, 23 Dec 2011 15:36:47 -0300 Subject: [PATCH 12/15] Changed java client to allow API URL with no authentication part. --- .../indextank/apiclient/IndexTankClient.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java index 76e414b..cb6b38e 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java +++ b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java @@ -621,8 +621,10 @@ private static Object callAPI(String method, String urlString, // http://code.google.com/p/googleappengine/issues/detail?id=1454 urlConnection.setInstanceFollowRedirects(false); urlConnection.setDoOutput(true); - urlConnection.setRequestProperty("Authorization", - "Basic " + Base64.encodeBytes(privatePass.getBytes())); + if (privatePass != null && !privatePass.isEmpty()) { + urlConnection.setRequestProperty("Authorization", + "Basic " + Base64.encodeBytes(privatePass.getBytes())); + } urlConnection.setRequestMethod(method); if (method.equals(PUT_METHOD) && data != null) { @@ -1339,4 +1341,14 @@ List get(String key){ } } + + public static void main(String[] args) throws IOException, InvalidSyntaxException { + IndexTankClient client = new IndexTankClient("http://localhost:20220"); + + Index index = client.getIndex("idx"); + + Query query = new Query("the"); + + System.out.println(index.search(query)); + } } From 8dae896c2d3eabb691c842345a26f3c060ea891a Mon Sep 17 00:00:00 2001 From: Chris Lamprecht Date: Tue, 17 Jan 2012 10:58:04 -0600 Subject: [PATCH 13/15] Fixing IndexOutOfBoundsException when handling BatchResults --- .../java/com/flaptor/indextank/apiclient/IndexTankClient.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java index cb6b38e..aef3c89 100644 --- a/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java +++ b/src/main/java/com/flaptor/indextank/apiclient/IndexTankClient.java @@ -857,10 +857,11 @@ public BatchResults addDocuments(Iterable documents) Boolean added = (Boolean) result.get("added"); addeds.add(i, added); + errors.add(i, null); // populate every index position to avoid IndexOutOfBoundsException below if (!added) { hasErrors = true; - errors.add(i, (String) result.get("error")); + errors.set(i, (String) result.get("error")); } } From c1d9bfd08f8ec2629e0c8f5d82b398cd99b423e3 Mon Sep 17 00:00:00 2001 From: Adrian Date: Tue, 17 Jan 2012 20:25:46 -0800 Subject: [PATCH 14/15] [maven-release-plugin] prepare release indextank-java-1.0.10 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8173ba8..793bb4a 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ indextank-java jar Indextank Java Client - 1.0.10-SNAPSHOT + 1.0.10 Java client for Indextank search engine http://www.indextank.com From b68c3c454afdd62384a9673f38be0883eb0ce7d5 Mon Sep 17 00:00:00 2001 From: Adrian Date: Tue, 17 Jan 2012 20:25:54 -0800 Subject: [PATCH 15/15] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 793bb4a..95ff89a 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ indextank-java jar Indextank Java Client - 1.0.10 + 1.0.11-SNAPSHOT Java client for Indextank search engine http://www.indextank.com