From 6a57a941dae2f7b95fe62884b47205ed50bbf9c0 Mon Sep 17 00:00:00 2001
From: esikkala <esko.ikkala@aalto.fi>
Date: Wed, 15 Dec 2021 10:55:49 +0200
Subject: [PATCH] JSON configs for full text search

---
 .../search_perspectives/fullTextSearch.json         |  5 +++++
 src/server/index.js                                 |  2 +-
 src/server/sparql/JenaQuery.js                      | 13 +++----------
 src/server/sparql/Utils.js                          | 13 ++++++++++---
 4 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/src/client/configs/sampo/perspective_configs/search_perspectives/fullTextSearch.json b/src/client/configs/sampo/perspective_configs/search_perspectives/fullTextSearch.json
index ad3672b2..72db0289 100644
--- a/src/client/configs/sampo/perspective_configs/search_perspectives/fullTextSearch.json
+++ b/src/client/configs/sampo/perspective_configs/search_perspectives/fullTextSearch.json
@@ -1,5 +1,10 @@
 {
     "id": "fullTextSearch",
+    "endpoint": {
+        "url": "https://ldf.fi/mmm/sparql",
+        "useAuth": false,
+        "prefixesFile": "SparqlQueriesPrefixes.js"
+    },
     "sparqlQueriesFile": "SparqlQueriesFullTextSearch.js",
     "propertiesQueryBlock": "fullTextSearchProperties",
     "hideCardOnFrontPage": true,
diff --git a/src/server/index.js b/src/server/index.js
index 635977da..1f0f9800 100644
--- a/src/server/index.js
+++ b/src/server/index.js
@@ -210,7 +210,7 @@ app.get(`${apiPath}/full-text-search`, async (req, res, next) => {
     const data = await queryJenaIndex({
       backendSearchConfig,
       queryTerm: req.query.q,
-      resultClass: 'jenaText',
+      resultClass: 'fullTextSearch',
       resultFormat: 'json'
     })
     res.json(data)
diff --git a/src/server/sparql/JenaQuery.js b/src/server/sparql/JenaQuery.js
index 0693d67f..20d335ea 100644
--- a/src/server/sparql/JenaQuery.js
+++ b/src/server/sparql/JenaQuery.js
@@ -1,4 +1,3 @@
-import { has } from 'lodash'
 import { runSelectQuery } from './SparqlApi'
 import { fullTextQuery } from './SparqlQueriesGeneral'
 import { makeObjectList } from './Mappers'
@@ -10,16 +9,10 @@ export const queryJenaIndex = async ({
   resultFormat
 }) => {
   let q = fullTextQuery
-  const config = backendSearchConfig[resultClass]
-  let endpoint
-  if (has(config, 'endpoint')) {
-    endpoint = config.endpoint
-  } else {
-    endpoint = backendSearchConfig[config.perspectiveID].endpoint
-  }
-  const { properties } = config
+  const perspectiveConfig = backendSearchConfig[resultClass]
+  const { endpoint, propertiesQueryBlock } = perspectiveConfig
   q = q.replace('<QUERY>', `(?id ?score) text:query ('${queryTerm.toLowerCase()}' 2000) .`)
-  q = q.replace('<RESULT_SET_PROPERTIES>', properties)
+  q = q.replace('<RESULT_SET_PROPERTIES>', propertiesQueryBlock)
   const results = await runSelectQuery({
     query: endpoint.prefixes + q,
     endpoint: endpoint.url,
diff --git a/src/server/sparql/Utils.js b/src/server/sparql/Utils.js
index a0506833..7bc8ef7d 100644
--- a/src/server/sparql/Utils.js
+++ b/src/server/sparql/Utils.js
@@ -13,6 +13,11 @@ export const createBackendSearchConfig = async () => {
     const perspectiveConfig = JSON.parse(perspectiveConfigJSON)
     const { sparqlQueriesFile } = perspectiveConfig
     const sparqlQueries = await import(`../sparql/${portalID}/sparql_queries/${sparqlQueriesFile}`)
+    if (has(perspectiveConfig, 'endpoint')) {
+      const { prefixesFile } = perspectiveConfig.endpoint
+      const { prefixes } = await import(`../sparql/${portalID}/sparql_queries/${prefixesFile}`)
+      perspectiveConfig.endpoint.prefixes = prefixes
+    }
     if (perspectiveConfig.searchMode === 'faceted-search') {
       // handle default resultClass which is same as perspectiveID
       const { paginatedResultsConfig, instanceConfig } = perspectiveConfig.resultClasses[perspectiveID]
@@ -22,9 +27,6 @@ export const createBackendSearchConfig = async () => {
       const instancePagePropertiesQueryBlock = sparqlQueries[instancePagePropertiesQueryBlockID]
       paginatedResultsConfig.propertiesQueryBlock = paginatedResultsPropertiesQueryBlock
       instanceConfig.propertiesQueryBlock = instancePagePropertiesQueryBlock
-      const { prefixesFile } = perspectiveConfig.endpoint
-      const { prefixes } = await import(`../sparql/${portalID}/sparql_queries/${prefixesFile}`)
-      perspectiveConfig.endpoint.prefixes = prefixes
       // handle other resultClasses
       for (const resultClass in perspectiveConfig.resultClasses) {
         if (resultClass === perspectiveID) { continue }
@@ -57,6 +59,11 @@ export const createBackendSearchConfig = async () => {
         perspectiveConfig.datasets[dataset].resultQuery = sparqlQueries.federatedSearchSparqlQueries[dataset].resultQuery
       }
     }
+    if (perspectiveConfig.searchMode === 'full-text-search') {
+      const queryBlockID = perspectiveConfig.propertiesQueryBlock
+      const queryBlock = sparqlQueries[queryBlockID]
+      perspectiveConfig.propertiesQueryBlock = queryBlock
+    }
     backendSearchConfig[perspectiveID] = perspectiveConfig
   }
   // console.log(backendSearchConfig.perspective1.resultClasses.placesMsMigrations.postprocess.func)
-- 
GitLab