diff --git a/lib/services/elasticsearch.js b/lib/services/elasticsearch.js index afd6dd8..f407793 100644 --- a/lib/services/elasticsearch.js +++ b/lib/services/elasticsearch.js @@ -144,8 +144,10 @@ export async function bulkIndexFiles(files) { export async function search(query, options) { //add kws for selected fields + let builtFields = [] for(let field in options.fields){ - options.fields.push(options.fields[field] + 'kws') + builtFields.push(options.fields[field]) + builtFields.push(options.fields[field] + 'kws') } const searchQuery = { index: INDEX_NAME, @@ -153,8 +155,8 @@ export async function search(query, options) { size: 1500, query: { bool: { - must: buildMustClauses(query, options), - should: buildShouldClauses(query, options) + must: buildMustClauses(query, options, builtFields), + should: buildShouldClauses(query, options, builtFields) } }, highlight: { @@ -214,7 +216,7 @@ export async function search(query, options) { } } -function buildMustClauses(query, options) { +function buildMustClauses(query, options, builtFields) { const clauses = []; if (options.combineWith === 'AND') { @@ -222,7 +224,7 @@ function buildMustClauses(query, options) { clauses.push({ multi_match: { query: term, - fields: options.fields.map(field => + fields: builtFields.map(field => field === 'filename' || 'filenamekws' ? `${field}^2` : field ), fuzziness: options.fuzzy || 0, @@ -235,14 +237,14 @@ function buildMustClauses(query, options) { return clauses; } -function buildShouldClauses(query, options) { +function buildShouldClauses(query, options, builtFields) { const clauses = []; if (options.combineWith !== 'AND') { clauses.push({ multi_match: { query, - fields: options.fields.map(field => + fields: builtFields.map(field => field === 'filename' || 'filenamekws' ? `${field}^2` : field ), fuzziness: options.fuzzy || 0,