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