Update statistics in VC info and list web-services to use VC cache
(referTo) instead of the original KoralQuery definitions (#791).
Change-Id: I6c4d965e060faf53fe01b5e533c84bdfae8d992a
diff --git a/Changes b/Changes
index 4cf31b7..44e175c 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,8 @@
+# version 0.77-SNAPSHOT
+
+- Update statistics in VC info and list web-services to use VC cache (referTo)
+ instead of the original KoralQuery definitions (#791).
+
# version 0.76
- Add institution & landingPage to the resource web-service (#777)
diff --git a/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java b/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java
index e4451b8..f7fadb1 100644
--- a/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java
+++ b/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java
@@ -22,26 +22,34 @@
@Autowired
private KustvaktConfiguration config;
- public String retrieveStatisticsForCorpusQuery (List<String> cqList) throws KustvaktException {
+ public String retrieveStatisticsForCorpusQuery (List<String> cqList)
+ throws KustvaktException {
- KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
- String cq = combineMultipleCorpusQuery(cqList);
- String json = null;
- if (cq != null && !cq.isEmpty()) {
- builder.with(cq);
- json = builder.toJSON();
- }
+ String json = buildKoralQueryFromCorpusQuery(cqList);
+ String stats = searchKrill.getStatistics(json);
- if (json != null) {
- checkVC(json);
- }
- String stats = searchKrill.getStatistics(json);
+ if (stats.contains("-1")) {
+ throw new KustvaktException(StatusCodes.NO_RESULT_FOUND);
+ }
+ return stats;
+ }
- if (stats.contains("-1")) {
- throw new KustvaktException(StatusCodes.NO_RESULT_FOUND);
- }
- return stats;
- }
+ public String buildKoralQueryFromCorpusQuery (List<String> cqList)
+ throws KustvaktException {
+ KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
+ String cq = combineMultipleCorpusQuery(cqList);
+ String json = null;
+ if (cq != null && !cq.isEmpty()) {
+ builder.with(cq);
+ json = builder.toJSON();
+ }
+
+ if (json != null) {
+ checkVC(json);
+ }
+ return json;
+ }
+
private void checkVC (String json) throws KustvaktException {
JsonNode node = JsonUtils.readTree(json);
diff --git a/src/main/java/de/ids_mannheim/korap/service/QueryService.java b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
index 1962167..e3591c3 100644
--- a/src/main/java/de/ids_mannheim/korap/service/QueryService.java
+++ b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
@@ -23,6 +23,7 @@
import de.ids_mannheim.korap.constant.PrivilegeType;
import de.ids_mannheim.korap.constant.QueryType;
import de.ids_mannheim.korap.constant.ResourceType;
+import de.ids_mannheim.korap.core.service.StatisticService;
import de.ids_mannheim.korap.dao.AdminDao;
import de.ids_mannheim.korap.dao.QueryDao;
import de.ids_mannheim.korap.dao.RoleDao;
@@ -90,6 +91,9 @@
@Autowired
private UserGroupService userGroupService;
@Autowired
+ private StatisticService statisticService;
+
+ @Autowired
private SearchKrill krill;
@Autowired
private FullConfiguration config;
@@ -144,15 +148,24 @@
Iterator<QueryDO> i = queryList.iterator();
while (i.hasNext()) {
query = i.next();
- // String json = query.getKoralQuery();
+ String json = "";
String statistics = null;
- // if (queryType.equals(QueryType.VIRTUAL_CORPUS)) {
- // statistics = krill.getStatistics(json);
- // }
- QueryDto dto = converter.createQueryDto(query, statistics);
- dtos.add(dto);
- }
- return dtos;
+ if (queryType.equals(QueryType.VIRTUAL_CORPUS)) {
+ if (query.isCached()) {
+ List<String> cqList = new ArrayList<>(1);
+ cqList.add("referTo " + query.getName());
+ json = statisticService
+ .buildKoralQueryFromCorpusQuery(cqList);
+ }
+ else {
+ json = query.getKoralQuery();
+ }
+ statistics = krill.getStatistics(json);
+ }
+ QueryDto dto = converter.createQueryDto(query, statistics);
+ dtos.add(dto);
+ }
+ return dtos;
}
public void deleteQueryByName (String deletedBy, String queryName,
@@ -675,24 +688,30 @@
return query;
}
- public QueryDto retrieveQueryByName (String username, String queryName,
+ public QueryDto retrieveQueryByName (String username, String queryName,
String createdBy, QueryType queryType) throws KustvaktException {
QueryDO query = searchQueryByName(username, queryName, createdBy,
queryType);
String statistics = null;
- // long start,end;
- // start = System.currentTimeMillis();
- if (query.getQueryType().equals(QueryType.VIRTUAL_CORPUS)) {
- String json = query.getKoralQuery();
- statistics = krill.getStatistics(json);
- }
- // end = System.currentTimeMillis();
- // jlog.debug("{} statistics duration: {}", queryName, (end -
- // start));
+ String json = "";
+ if (query.getQueryType().equals(QueryType.VIRTUAL_CORPUS)) {
+ if (query.isCached()) {
+ List<String> cqList = new ArrayList<>(1);
+ cqList.add("referTo " + query.getName());
+ json = statisticService
+ .buildKoralQueryFromCorpusQuery(cqList);
+ }
+ else {
+ json = query.getKoralQuery();
+ }
+ statistics = krill.getStatistics(json);
+ }
return converter.createQueryDto(query, statistics);
}
+ //EM: unused
+ @Deprecated
public QueryDto searchQueryById (String username, int queryId)
throws KustvaktException {
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusListTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusListTest.java
index 7f45f6f..1315c95 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusListTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusListTest.java
@@ -1,14 +1,21 @@
package de.ids_mannheim.korap.web.controller.vc;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import java.io.IOException;
+
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import com.fasterxml.jackson.databind.JsonNode;
+import de.ids_mannheim.korap.cache.VirtualCorpusCache;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.user.User.CorpusAccess;
+import de.ids_mannheim.korap.util.QueryException;
import jakarta.ws.rs.ProcessingException;
import jakarta.ws.rs.core.Response;
@@ -27,7 +34,7 @@
@Test
public void testListVCPearl ()
- throws ProcessingException, KustvaktException {
+ throws ProcessingException, KustvaktException, IOException, QueryException {
JsonNode node = testListOwnerVC("pearl");
assertEquals(0, node.size());
node = listVC("pearl");
@@ -35,14 +42,13 @@
node = node.get(0);
assertEquals("system-vc", node.at("/name").asText());
assertEquals("system", node.at("/type").asText());
- assertEquals("experimental", node.at("/status").asText());
assertEquals(CorpusAccess.ALL.name(),
node.at("/requiredAccess").asText());
assertEquals("system", node.at("/createdBy").asText());
- assertTrue(node.at("/numberOfDoc").isMissingNode());
- assertTrue(node.at("/numberOfParagraphs").isMissingNode());
- assertTrue(node.at("/numberOfSentences").isMissingNode());
- assertTrue(node.at("/numberOfTokens").isMissingNode());
+ assertEquals(11,node.at("/numberOfDoc").asInt());
+ assertEquals(772,node.at("/numberOfParagraphs").asInt());
+ assertEquals(25074,node.at("/numberOfSentences").asInt());
+ assertEquals(665842,node.at("/numberOfTokens").asInt());
}
@Test