humlab-sead / sead_query_api

.NET Core port of Query SEAD API
Other
2 stars 0 forks source link

RANGE facets gets no data from QuerySEAD. #1

Closed roger-mahler closed 4 years ago

roger-mahler commented 5 years ago

Curl statement to reproduce error:

curl 'http://address-to-dev-server/api/result/load' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Referer: http://localhost:8080/' -H 'Origin: http://localhost:8080' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' -H 'Content-Type: application/json; charset=UTF-8' --data-binary '{"facetsConfig":{"requestId":8,"requestType":"populate","targetCode":"geochronology","triggerCode":"geochronology","facetConfigs":[{"facetCode":"geochronology","position":1,"picks":[{"pickType":2,"pickValue":370,"text":370},{"pickType":3,"pickValue":293666,"text":293666}],"textFilter":""}]},"resultConfig":{"requestId":8,"sessionId":"1","viewTypeId":"map","aggregateKeys":["site_level"]}}' --compressed

Error description

The dataCollection is empty in the response JSON.

Expected behaviour

The dataCollection attribute should contain all selected sites i.e. same behavior as for calls without selections.

The error occurs only for range-facets. The behavior is correct for discrete facets.

I data->dataCollection arrayen tom. I en request utan selections innehåller dataCollection de valda siterna, vilket är det förväntade resultatet även här.

Detta gäller endast range-facetter, med list-facetter fungerar det som väntat.

roger-mahler commented 5 years ago

Felet beror på konstigheter i databasen.

Tabell tbl_geochronology i sead_master_8 på dataserver saknas physical_sample_id (dvs. deras poster i tbl_analysis_entities).

Följande fråga ger 0 träffar:

SELECT DISTINCT tbl_sites.site_id AS id_column, tbl_sites.site_name AS name, coalesce(latitude_dd, 0.0) AS latitude_dd, coalesce(longitude_dd, 0) AS longitude_dd
FROM tbl_sites
LEFT JOIN tbl_sample_groups  ON tbl_sample_groups."site_id" = tbl_sites."site_id"
LEFT JOIN tbl_physical_samples  ON tbl_physical_samples."sample_group_id" = tbl_sample_groups."sample_group_id"  
LEFT JOIN tbl_analysis_entities  ON tbl_analysis_entities."physical_sample_id" = tbl_physical_samples."physical_sample_id"  
INNER JOIN tbl_geochronology  ON tbl_geochronology."analysis_entity_id"::int = tbl_analysis_entities."analysis_entity_id"::int
WHERE 1 = 1
  AND (( (tbl_geochronology.age >= 370 and tbl_geochronology.age <= 293666)))

Följande fråga visar att physical_sample_id är NULL för samtliga poster:

SELECT *
FROM tbl_geochronology 
JOIN tbl_analysis_entities
  ON tbl_geochronology."analysis_entity_id" = tbl_analysis_entities."analysis_entity_id"
roger-mahler commented 5 years ago

Additional note:

När en range-facet begärs med selections/picks som exempelvis går från 200-1000 så skickas endast data mellan 200-1000, istället för alla data. En facet ska inte filtrera sig själv på detta sättet.