Skip to content

Commit fed0f44

Browse files
committed
feat: boost display fields in solr query
1 parent 38ca0e5 commit fed0f44

File tree

4 files changed

+20
-2
lines changed

4 files changed

+20
-2
lines changed

Diff for: resources/config/gis-client-config.js

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ var clientConfig = {
2727
defaultUseViewBox: true,
2828
useNominatim: true,
2929
groupByCategory: true,
30+
boostDisplayedFields: false,
3031
useSolrHighlighting: true,
3132
delay: 1000,
3233
minChars: 3,

Diff for: src/components/MultiSearch/index.tsx

+10-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,16 @@ export const MultiSearch: React.FC<MultiSearchProps> = ({
226226
};
227227

228228
if (q.fieldList) {
229-
solrQueryConfig.qf = q.fieldList;
229+
let qf = q.fieldList;
230+
if (q.displayTemplates && ClientConfiguration.search?.boostDisplayedFields) {
231+
// boost all fields which are part of the display template
232+
qf = q.fieldList
233+
.split(' ')
234+
// todo: do we want do require a match for all displayTempaltes (every) or for any (some)
235+
.map(field => q.displayTemplates?.some(dt => dt.indexOf(field) >= 0) ? `${field}^3` : field)
236+
.join(' ');
237+
}
238+
solrQueryConfig.qf = qf;
230239
} else {
231240
solrQueryConfig.qf = ClientConfiguration.search?.coreName ?? 'search';
232241
}

Diff for: src/global.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ declare module 'clientConfig' {
2828
solrBasePath?: string;
2929
useNominatim?: boolean;
3030
groupByCategory?: boolean;
31+
boostDisplayedFields?: boolean;
3132
useSolrHighlighting?: boolean;
3233
defaultUseViewBox?: boolean;
3334
delay?: number;

Diff for: src/utils/generateSolrQuery.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import _groupBy from 'lodash/groupBy';
2+
import _isNil from 'lodash/isNil';
23
import Map from 'ol/Map';
34

45
import {
@@ -18,6 +19,7 @@ export interface SolrQueryProps {
1819
type SolrQuery = {
1920
query: string;
2021
fieldList?: string;
22+
displayTemplates?: string[];
2123
};
2224

2325
/**
@@ -45,11 +47,16 @@ export const generateSolrQuery = ({
4547
.filter(l => isWmsLayer(l))
4648
.map(l => (l as WmsLayer).getSource()?.getParams()?.LAYERS);
4749

50+
const displayTemplates = layerList
51+
.map(l => (l.get('searchConfig') as SearchConfig)?.displayTemplate)
52+
.filter(d => d) as string[];
53+
4854
const queriesPerQueryFields = layerNames.map(layerName => `(featureType:"${layerName}" AND (${generateSearchQuery(parts)}))`);
4955
const query = queriesPerQueryFields.join(' OR ');
5056
searchQueries.push({
5157
query: query,
52-
fieldList: key !== 'undefined' ? key.split(',').join(' ') : undefined
58+
fieldList: key !== 'undefined' ? key.split(',').join(' ') : undefined,
59+
displayTemplates: displayTemplates
5360
});
5461
});
5562

0 commit comments

Comments
 (0)