Skip to content

Commit

Permalink
#940 Fix for qid query error (#941)
Browse files Browse the repository at this point in the history
  • Loading branch information
nickdos authored Jan 24, 2025
1 parent f593b8e commit cc9794c
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 10 deletions.
18 changes: 10 additions & 8 deletions src/main/java/au/org/ala/biocache/util/QueryFormatUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -136,10 +136,11 @@ public Map[] formatSearchQuery(SpatialSearchRequestDTO searchParams, boolean for
Map<String, Facet> activeFacetMap = new HashMap();
Map<String, List<Facet>> activeFacetObj = new HashMap<>();
Map[] fqMaps = {activeFacetMap, activeFacetObj};
Boolean isIncludeUnfilteredFacetValues = searchParams.getIncludeUnfilteredFacetValues();

//Only format the query if it doesn't already supply a formattedQuery.
if (forceQueryFormat || StringUtils.isEmpty(searchParams.getFormattedQuery())) {
String[] originalFqs = Arrays.copyOf(searchParams.getFq(), searchParams.getFq().length); // copy by value
String[] originalFqs = searchParams.getFq();

String [] formatted = formatQueryTerm(searchParams.getQ(), searchParams);
searchParams.setDisplayString(formatted[0]);
Expand All @@ -149,15 +150,15 @@ public Map[] formatSearchQuery(SpatialSearchRequestDTO searchParams, boolean for
searchParams.setFormattedFq(null);

// Apply filter tagging and excluding filters if flag is set
if (searchParams.getIncludeUnfilteredFacetValues()) {
if (isIncludeUnfilteredFacetValues) {
applyFilterTagging(searchParams);
}

//format fqs for facets that need ranges substituted
if (searchParams.getFq() != null) {
for (int i = 0; i < searchParams.getFq().length; i++) {
String fq = searchParams.getFq()[i];
String fqOriginal = originalFqs[i]; // not altered by `applyFilterTagging()`
String fqOriginal = (originalFqs.length > i) ? originalFqs[i] : fq; // not altered by `applyFilterTagging()`

if (fq != null && !fq.isEmpty()) {
formatted = formatQueryTerm(fq, searchParams);
Expand All @@ -167,11 +168,11 @@ public Map[] formatSearchQuery(SpatialSearchRequestDTO searchParams, boolean for
addFormattedFq(new String[]{formatted[1]}, searchParams);
}

//add to activeFacetMap fqs that are not inserted by a qid, and the q of qids in fqs.
//do not add spatial fields
if (originalFqs != null && i < originalFqs.length && !formatted[1].contains(spatialField + ":")) {
// add to activeFacetMap fqs that are not inserted by a qid, and the q of qids in fqs.
// do not add spatial fields
if (originalFqs != null && originalFqs.length > i && !formatted[1].contains(spatialField + ":")) {
Facet facet = new Facet();
facet.setDisplayName(formattedOriginal[0]);
facet.setDisplayName(isIncludeUnfilteredFacetValues ? formattedOriginal[0] : formatted[0]);
String[] fv = fqOriginal.split(":");
if (fv.length >= 2) {
facet.setName(fv[0]);
Expand All @@ -184,7 +185,8 @@ public Map[] formatSearchQuery(SpatialSearchRequestDTO searchParams, boolean for
// activeFacetObj which is [StringKey: List<Facet>]
String fqKey = parseFQ(fqOriginal);
if (fqKey != null) {
Facet fct = new Facet(fqKey, formattedOriginal[0]); // display name is the formatted name, for example '11' to 'November'
String formattedFacet = (isIncludeUnfilteredFacetValues) ? formattedOriginal[0] : formatted[0];
Facet fct = new Facet(fqKey, formattedFacet); // display name is the formatted name, for example '11' to 'November'
fct.setValue(fqOriginal); // value in activeFacetMap is the part with key replaced by '', but here is the original fq because front end will need it
List<Facet> valList = activeFacetObj.getOrDefault(fqKey, new ArrayList<>());
valList.add(fct);
Expand Down
21 changes: 19 additions & 2 deletions src/test/java/au/org/ala/biocache/util/QueryFormatUtilsSpec.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,25 @@ class QueryFormatUtilsSpec extends Specification {
searchParams.getDisplayString() == "scientificName:Test"
}

def "test formatSearchQuery with qid fq"() {
given:
SpatialSearchRequestDTO searchParams = new SpatialSearchRequestDTO()
searchParams.setQ("*:*")
searchParams.setFq(new String[]{"qid:123456"})
qidCacheDao.get(_) >> new Qid(q: "scientificName:TestTaxon", fqs: new String[0])
searchParams.setFacet(true)
when:
def result = queryFormatUtils.formatSearchQuery(searchParams, false)

then:
result[0].size() == 1
result[1].size() == 1
searchParams.getFormattedQuery() == "*:*"
searchParams.getDisplayString() == "[all records]"
searchParams.getFq() == new String[]{"qid:123456"}
searchParams.getFormattedFq() == new String[]{"scientificName:TestTaxon"}
}

def "test formatSearchQuery with facets"() {
given:
SpatialSearchRequestDTO searchParams = new SpatialSearchRequestDTO()
Expand All @@ -157,8 +176,6 @@ class QueryFormatUtilsSpec extends Specification {
searchParams.getPivotFacets() == new String[]{}
}



def "test formatSearchQuery with tagging and excluded facets"() {
given:
SpatialSearchRequestDTO searchParams = new SpatialSearchRequestDTO()
Expand Down

0 comments on commit cc9794c

Please sign in to comment.