Skip to content

Commit

Permalink
TRUNK-4424 Score shorter matches higher
Browse files Browse the repository at this point in the history
  • Loading branch information
rkorytkowski committed Jul 15, 2014
1 parent adccb94 commit 4b24bd0
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 10 deletions.
3 changes: 3 additions & 0 deletions api/src/main/java/org/openmrs/ConceptName.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
import org.hibernate.search.annotations.Similarity;
import org.hibernate.search.annotations.TokenFilterDef;
import org.hibernate.search.annotations.TokenizerDef;
import org.openmrs.api.ConceptNameType;
import org.openmrs.api.context.Context;
import org.openmrs.api.db.hibernate.search.ConceptNameSimilarity;
import org.openmrs.api.db.hibernate.search.bridge.LocaleFieldBridge;
import org.openmrs.util.OpenmrsUtil;
import org.simpleframework.xml.Attribute;
Expand All @@ -50,6 +52,7 @@
@AnalyzerDef(name = "ConceptNameAnalyzer", tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class), filters = {
@TokenFilterDef(factory = StandardFilterFactory.class), @TokenFilterDef(factory = LowerCaseFilterFactory.class) })
@Analyzer(definition = "ConceptNameAnalyzer")
@Similarity(impl = ConceptNameSimilarity.class)
public class ConceptName extends BaseOpenmrsObject implements Auditable, Voidable, java.io.Serializable {

public static final long serialVersionUID = 2L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -634,17 +634,26 @@ private StringBuilder newNameQuery(final List<String> tokenizedName, final Strin
query.append("(");
if (searchKeywords) {
//Put exact phrase higher
query.append(" name:(\"" + escapedName + "\")^0.6");
query.append(" name:(\"" + escapedName + "\")^0.7");

if (!tokenizedName.isEmpty()) {
//Include exact
query.append(" OR name:(" + StringUtils.join(tokenizedName, " ") + ")^0.2");

//Include partial
query.append(" OR name:(" + StringUtils.join(tokenizedName, "* ") + "*)^0.1");

//Include similar
query.append(" OR name:(" + StringUtils.join(tokenizedName, "~0.8 ") + "~0.8)^0.1");
query.append(" OR (");
for (String token : tokenizedName) {
query.append(" (name:(");

//Include exact
query.append(token);
query.append(")^0.6 OR name:(");

//Include partial
query.append(token);
query.append("*)^0.3 OR name:(");

//Include similar
query.append(token);
query.append("~0.8)^0.1)");
}
query.append(")^0.3");
}
} else {
query.append(" name:\"" + escapedName + "\"");
Expand Down
2 changes: 1 addition & 1 deletion api/src/main/java/org/openmrs/util/OpenmrsConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -1086,7 +1086,7 @@ public static final Collection<String> AUTO_ROLES() {
*
* @since 1.11
*/
public static final Integer SEARCH_INDEX_VERSION = 1;
public static final Integer SEARCH_INDEX_VERSION = 2;

/**
* At OpenMRS startup these global properties/default values/descriptions are inserted into the
Expand Down
9 changes: 9 additions & 0 deletions api/src/test/java/org/openmrs/api/ConceptServicePT.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.equalToIgnoringCase;
import static org.hamcrest.Matchers.is;
import static org.openmrs.test.OpenmrsMatchers.hasId;

import java.util.List;
Expand Down Expand Up @@ -77,4 +79,11 @@ public void shouldTestGetConceptByName() {

assertThat(concept, hasId(138571));
}

@Test
public void shouldReturnDiabetesMellitusFirstForDiabetesMellit() {
List<Concept> concepts = conceptService.getConceptsByName("diabetes mellit", null, false);

assertThat(concepts.get(0).getName().getName(), equalToIgnoringCase("diabetes mellitus"));
}
}

0 comments on commit 4b24bd0

Please sign in to comment.