diff --git a/indexes/repo/settings.json b/indexes/repo/settings.json index 37af98ba..25611df0 100644 --- a/indexes/repo/settings.json +++ b/indexes/repo/settings.json @@ -1,5 +1,4 @@ { - "index.mapping.total_fields.limit": 2000, "analysis": { "filter": { "english_stop": { diff --git a/services/searcher/index.js b/services/searcher/index.js index 8533e178..242db4c0 100644 --- a/services/searcher/index.js +++ b/services/searcher/index.js @@ -100,32 +100,22 @@ class Searcher { body.query("bool", "should", query); } - _addFullTextQuery(body, queryParams) { - if (queryParams.q) { - // need to nest `_fulltext` query as a "must" - let ftBody = new Bodybuilder(); - - ftBody.query("bool", "should", { - "multi_match": { - "query": queryParams.q, - "fields": [ - "name^10", - "name._fulltext^10", - "description^4", - "agency.acronym^5", - "agency.name^5", - "agency.name._fulltext^5", - "permissions.usageType^3", - "tags", - "tags._fulltext", - "languages", - "languages._fulltext" - ] - } - }); - - body.query("bool", "must", ftBody.build("v2")["query"]); - } + _addFullTextQuery(body, searchQuery) { + const searchFields = [ + "name^10", + "name._fulltext^5", + "description^2", + "agency.acronym", + "agency.name^5", + "agency.name._fulltext", + "permissions.usageType", + "tags^3", + "tags._fulltext", + "languages^3", + "languages._fulltext" + ]; + + body.query("multi_match", 'fields', searchFields, {"query": searchQuery}, {"type": "best_fields"}); } _addStringFilter(body, field, filter) { @@ -236,6 +226,7 @@ class Searcher { * @param {any} queryParams The query parameters a user is searching for */ _addSortOrder(body, queryParams) { + body.sort('_score', queryParams['sort'] || 'desc'); body.sort('score', 'desc'); if(queryParams['sort']) { const sortValues = []; @@ -263,19 +254,19 @@ class Searcher { body.sort(sortField, 'asc'); } }); - } else { - body.sort('_score', queryParams['sort'] || 'desc'); } } _searchReposQuery(queryParams) { let body = new Bodybuilder(); + if(queryParams.q) { + this._addFullTextQuery(body, queryParams.q); + } this._addFieldFilters(body, queryParams); this._addSizeFromParams(body, queryParams); - this._addIncludeExclude(body, queryParams); - this._addFullTextQuery(body, queryParams); + this._addIncludeExclude(body, queryParams); this._addSortOrder(body, queryParams); let query = body.build("v2"); @@ -322,7 +313,7 @@ class Searcher { // add query terms (boost when phrase is matched) if (queryParams.term) { body.query("match", "term_suggest", queryParams.term); - body.query("match", "term_suggest", { query: queryParams.term, type: "phrase" }); + body.query("match_phrase", "term_suggest", { query: queryParams.term }); } // set the term types (use defaults if not supplied)