@@ -127,17 +127,18 @@ public void search(
127
127
if (queryFields == null ) {
128
128
// if exact just search the supplied fields for exact matches
129
129
if (exact ) {
130
- String [] fields = {"label_s" , "synonym_s" , "short_form_s" , "obo_id_s" , "iri_s" , "annotations_trimmed" };
131
- solrQuery .setQuery (
132
- "((" +
133
- createUnionQuery (query .toLowerCase (), SolrFieldMapper .mapFieldsList (List .of (fields ))
134
- .toArray (new String [0 ]), true )
135
- + ") AND (" + IS_DEFINING_ONTOLOGY .getText () + ":\" true\" ^100 OR " +
136
- IS_DEFINING_ONTOLOGY .getText () + ":false^0))"
137
- );
138
-
130
+ solrQuery .set ("defType" , "edismax" );
131
+ solrQuery .setQuery (query .toLowerCase ());
132
+ // Specify the query fields with boosting
133
+ String [] fields = {"label_s^5" , "synonym_s^3" , "short_form_s^2" , "obo_id_s^2" , "iri_s" , "annotations_trimmed" };
134
+ solrQuery .set ("qf" , String .join (" " , SolrFieldMapper .mapFieldsList (List .of (fields ))));
135
+ // Boost exact phrase matches in label and synonym fields
136
+ solrQuery .set ("pf" , "lowercase_label^10 lowercase_synonym^5" );
137
+ // Set minimum match to require all terms in the phrase to match
138
+ solrQuery .set ("mm" , "100%" );
139
+ // Add boost query to prioritize defining ontologies
140
+ solrQuery .set ("bq" , IS_DEFINING_ONTOLOGY .getText () + ":\" true\" ^100" );
139
141
} else {
140
-
141
142
solrQuery .set ("defType" , "edismax" );
142
143
solrQuery .setQuery (query );
143
144
0 commit comments