Author: bpoussin Date: 2012-03-08 00:36:33 +0100 (Thu, 08 Mar 2012) New Revision: 1448 Url: http://nuiton.org/repositories/revision/wikitty/1448 Log: Evolution #1997: Add elapsed time in QueryResult Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportXML.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryResult.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java 2012-03-07 21:52:52 UTC (rev 1447) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyClient.java 2012-03-07 23:36:33 UTC (rev 1448) @@ -787,7 +787,7 @@ if (limitToFirst) { for (WikittyQuery query : serviceQueries) { - query.setFirst(0); + query.setOffset(0); query.setLimit(1); // lorsqu'on limit au premier, c'est qu'on utilise la methode // pour retourne seulement un objet et pas un WikittyQueryResult @@ -798,8 +798,8 @@ } } - List<WikittyQueryResult<String>> pagedResult = wikittyService.findAllByQuery( - securityToken, serviceQueries); + List<WikittyQueryResult<String>> pagedResult = + findAllByQuery(serviceQueries); result = new ArrayList<WikittyQueryResult<E>>(pagedResult.size()); for (WikittyQueryResult<String> p : pagedResult) { @@ -934,6 +934,16 @@ // /////////////////////////////////////////////////////////////////////////// + /** + * Retourne les ids des wikitties qui correspondent au critere, chaque + * query passees en argument et retourne un WikittyQueryResult. + * + * Cette method est la seul a reellement faire un appel a findAllByQuery + * du wikitty service. + * + * @param query + * @return + */ public List<WikittyQueryResult<String>> findAllByQuery(List<WikittyQuery> query) { long start = TimeLog.getTime(); List<WikittyQueryResult<String>> result = null; @@ -1712,13 +1722,17 @@ */ public <E> WikittyQueryResult<E> castTo(Class<E> target, WikittyQueryResult queryResult) { + + long startTime = System.nanoTime(); List<E> castedResult = castTo(target, queryResult.getAll()); + long estimatedTime = System.nanoTime() - startTime; WikittyQueryResult<E> result = new WikittyQueryResult<E>( queryResult.getQueryName(), - queryResult.getFirst(), queryResult.getTotalResult(), + queryResult.getOffset(), queryResult.getTotalResult(), queryResult.getQueryString(), queryResult.getFacets(), - castedResult); + castedResult, queryResult.getTimeQuery(), estimatedTime); + return result; } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java 2012-03-07 21:52:52 UTC (rev 1447) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java 2012-03-07 23:36:33 UTC (rev 1448) @@ -400,7 +400,7 @@ WikittyQueryResult<Wikitty> queryResult = new WikittyQueryResult( pagedResult.getCriteriaName(), pagedResult.getFirstIndice(), pagedResult.getNumFound(), pagedResult.getQueryString(), facet, - pagedResult.getAll()); + pagedResult.getAll(), 0, 0); exportWriter(client, writer, queryResult); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportXML.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportXML.java 2012-03-07 21:52:52 UTC (rev 1447) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportXML.java 2012-03-07 23:36:33 UTC (rev 1448) @@ -222,7 +222,7 @@ WikittyQueryResult<Wikitty> queryResult = new WikittyQueryResult( pagedResult.getCriteriaName(), pagedResult.getFirstIndice(), pagedResult.getNumFound(), pagedResult.getQueryString(), null, - pagedResult.getAll()); + pagedResult.getAll(), 0, 0); exportWriter(client, result, queryResult); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryResult.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryResult.java 2012-03-07 21:52:52 UTC (rev 1447) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryResult.java 2012-03-07 23:36:33 UTC (rev 1448) @@ -57,8 +57,8 @@ /** nom du critere qui a ete uitilise (peut-etre null) si le critete n'avait pas de nom */ protected String queryName; - /** indice of first result in global search result */ - protected int first; + /** indice of offset result in global search result */ + protected int offset; /** total number of result if we call the query for all possible result */ protected int totalResult; /** query really executed (internal representation depend of search engine used */ @@ -72,6 +72,10 @@ * lazy loaded from facets variable. */ protected Map<String, Map<String, FacetTopic>> facetsAsMap = null; + /** temps (nanoseconde) mis pour faire la requete (calcul cote serveur)*/ + protected long timeQuery; + /** temps (nanoseconde) de transformation des resultats bruts en un autre type(calcul cote client)*/ + protected long timeConvertion; /** @@ -79,31 +83,43 @@ * * we don't initialize securityToken * - * @param first indice element in global search result + * @param offset indice element in global search result * @param totalResult total number of result if we call the query for all possible result * @param queryString query really executed * @param facets facet asked or null if no facet * @param results list of result in the wanted interval */ public WikittyQueryResult(String queryName, - int first, int totalResult, String queryString, - Map<String, List<FacetTopic>> facets, List<T> results) { + int offset, int totalResult, String queryString, + Map<String, List<FacetTopic>> facets, List<T> results, + long timeQuery, long timeConvertion) { this.queryName = queryName; - this.first = first; + this.offset = offset; this.totalResult = totalResult; this.queryString = queryString; this.facets = facets; this.results = Collections.unmodifiableList(results); + this.timeQuery = timeQuery; + this.timeConvertion = timeConvertion; } public String getQueryName() { return queryName; } + /** + * + * @deprecated since 3.5 use {@link #getOffset()} + */ + @Deprecated public int getFirst() { - return first; + return offset; } + public int getOffset() { + return offset; + } + public int getTotalResult() { return totalResult; } @@ -208,10 +224,10 @@ /** - * Return the first element in result + * Return the offset element in result * * Can throw an exception if no element available - * @return first element + * @return offset element */ public T peek() { T result = get(0); @@ -249,6 +265,36 @@ } /** + * temps (nanoseconde) mis pour faire la requete (calcul cote serveur) + */ + public long getTimeQuery() { + return timeQuery; + } + + /** + * temps (nanoseconde) mis pour faire la requete (calcul cote serveur) + */ + public void setTimeQuery(long timeQuery) { + this.timeQuery = timeQuery; + } + + /** + * temps (nanoseconde) de transformation des resultats bruts en un autre + * type(calcul cote client) + */ + public long getTimeConvertion() { + return timeConvertion; + } + + /** + * temps (nanoseconde) de transformation des resultats bruts en un autre + * type(calcul cote client) + */ + public void setTimeConvertion(long timeConvertion) { + this.timeConvertion = timeConvertion; + } + + /** * Iterate on result, same as getAll().iterator(). * @return */ Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2012-03-07 21:52:52 UTC (rev 1447) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2012-03-07 23:36:33 UTC (rev 1448) @@ -999,8 +999,11 @@ if (c == null) { result.add(null); } else { + long startTime = System.nanoTime(); WikittyQueryResult<String> searchResult = getSearchEngine().findAllByQuery(tx, c); + long estimatedTime = System.nanoTime() - startTime; + searchResult.setTimeQuery(estimatedTime); result.add(searchResult); } } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java 2012-03-07 21:52:52 UTC (rev 1447) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java 2012-03-07 23:36:33 UTC (rev 1448) @@ -425,9 +425,10 @@ // FIXME les facettes sont fausses :( Map<String, List<org.nuiton.wikitty.query.FacetTopic>> facets = resultWs.getFacets(); List<String> results = new ArrayList<String>(ids); + long timeQuery = resultTx.getTimeQuery() + resultWs.getTimeQuery(); result.add(new WikittyQueryResult<String>(queryName, - firstIndice, numFound, queryString, facets, results)); + firstIndice, numFound, queryString, facets, results, timeQuery, 0)); } if (queries.size() != result.size()) { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java 2012-03-07 21:52:52 UTC (rev 1447) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineHelper.java 2012-03-07 23:36:33 UTC (rev 1448) @@ -208,11 +208,12 @@ // fusion des resultats WikittyQueryResult<String> result = new WikittyQueryResult<String>( query.getName(), - query.getFirst(), + query.getOffset(), topics.size(), resultSelect.getQueryString(), resultFacet.getFacets(), - selectList); + selectList, + 0, 0); return result; } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java 2012-03-07 21:52:52 UTC (rev 1447) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/storage/WikittySearchEngineInMemory.java 2012-03-07 23:36:33 UTC (rev 1448) @@ -354,7 +354,8 @@ } result = new WikittyQueryResult<String>(query.getName(), - offset, totalResult, query.getCondition().toString(), facets.getFacets(), ids); + offset, totalResult, query.getCondition().toString(), + facets.getFacets(), ids, 0, 0); } return result; } Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-03-07 21:52:52 UTC (rev 1447) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-03-07 23:36:33 UTC (rev 1448) @@ -2420,7 +2420,21 @@ Assert.assertEquals(2, treeNodeResult.getAttCount()); // 0 before move } + /** + * Test time query duration + */ @Test + public void testTimeQuery() { + WikittyQuery query = WikittyQueryParser.parse( + "ProductPicture.price=*"); + WikittyQueryResult<Product> result = wikittyClient.findAllByQuery(Product.class, query); + Assert.assertTrue(0 < result.getTimeQuery()); + Assert.assertTrue(0 < result.getTimeConvertion()); + } + + + + @Test public void testCryptAndPatternField() throws Exception { WikittyExtension ext = new WikittyExtension("UserTest", "1.0", // version Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2012-03-07 21:52:52 UTC (rev 1447) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2012-03-07 23:36:33 UTC (rev 1448) @@ -794,7 +794,7 @@ // Build paged result result = new WikittyQueryResult<String>( query.getName(), - offset, numFound, queryString, facets, ids); + offset, numFound, queryString, facets, ids, 0, 0); } return result;