Skip to content

Commit cf749d1

Browse files
authored
Merge pull request #627 from medizininformatik-initiative/bugfix/626-fix-search-through-original-display-if-de-and-en-empty
#626 - FIX: Search through original display if de and en empty
2 parents a44a98d + 6af6169 commit cf749d1

File tree

2 files changed

+12
-63
lines changed

2 files changed

+12
-63
lines changed

src/main/java/de/numcodex/feasibility_gui_backend/terminology/es/CodeableConceptService.java

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
public class CodeableConceptService {
3434
public static final String FIELD_NAME_DISPLAY_DE = "display.de";
3535
public static final String FIELD_NAME_DISPLAY_EN = "display.en";
36-
public static final String FIELD_NAME_DISPLAY_ORIGINAL = "display.original";
36+
public static final String FIELD_NAME_DISPLAY_ORIGINAL_WITH_BOOST = "display.original^0.5";
3737
public static final String FIELD_NAME_TERMCODE_WITH_BOOST = "termcode.code^2";
3838
private static final UUID NAMESPACE_UUID = UUID.fromString("00000000-0000-0000-0000-000000000000");
3939
private ElasticsearchOperations operations;
@@ -101,55 +101,28 @@ private SearchHits<CodeableConceptDocument> findByCodeOrDisplay(String keyword,
101101
});
102102
}
103103

104-
BoolQuery outerBoolQuery;
104+
BoolQuery boolQuery;
105105

106106
if (keyword.isEmpty()) {
107-
outerBoolQuery = new BoolQuery.Builder()
107+
boolQuery = new BoolQuery.Builder()
108108
.filter(filterTerms.isEmpty() ? List.of() : filterTerms)
109109
.build();
110110

111111
} else {
112-
var translationDeExistsQuery = new ExistsQuery.Builder()
113-
.field(FIELD_NAME_DISPLAY_DE)
114-
.build();
115-
116-
var translationEnExistsQuery = new ExistsQuery.Builder()
117-
.field(FIELD_NAME_DISPLAY_EN)
118-
.build();
119-
120-
var mmQueryWithTranslations = new MultiMatchQuery.Builder()
121-
.query(keyword)
122-
.fields(List.of(FIELD_NAME_DISPLAY_DE, FIELD_NAME_DISPLAY_EN, FIELD_NAME_TERMCODE_WITH_BOOST))
123-
.build();
124-
125-
var boolQueryWithTranslations = new BoolQuery.Builder()
126-
.should(List.of(translationDeExistsQuery._toQuery(), translationEnExistsQuery._toQuery()))
127-
.must(List.of(mmQueryWithTranslations._toQuery()))
128-
.filter(filterTerms.isEmpty() ? List.of() : filterTerms)
129-
.build();
130-
131-
132-
// The "lower" part that will only be considered when the translations are empty
133-
var mmQueryWithOriginal = new MultiMatchQuery.Builder()
112+
var multiMatchQuery = new MultiMatchQuery.Builder()
134113
.query(keyword)
135-
.fields(List.of(FIELD_NAME_DISPLAY_ORIGINAL, FIELD_NAME_TERMCODE_WITH_BOOST))
114+
.fields(List.of(FIELD_NAME_DISPLAY_DE, FIELD_NAME_DISPLAY_EN, FIELD_NAME_TERMCODE_WITH_BOOST, FIELD_NAME_DISPLAY_ORIGINAL_WITH_BOOST))
136115
.build();
137116

138-
var boolQueryWithOriginal = new BoolQuery.Builder()
139-
.mustNot(List.of(translationDeExistsQuery._toQuery(), translationEnExistsQuery._toQuery()))
140-
.must(List.of(mmQueryWithOriginal._toQuery()))
117+
boolQuery = new BoolQuery.Builder()
118+
.must(List.of(multiMatchQuery._toQuery()))
141119
.filter(filterTerms.isEmpty() ? List.of() : filterTerms)
142-
.minimumShouldMatch("1")
143120
.build();
144121

145-
// Combine both parts in the top level bool query
146-
outerBoolQuery = new BoolQuery.Builder()
147-
.should(List.of(boolQueryWithTranslations._toQuery(), boolQueryWithOriginal._toQuery()))
148-
.build();
149122
}
150123

151124
var query = new NativeQueryBuilder()
152-
.withQuery(outerBoolQuery._toQuery())
125+
.withQuery(boolQuery._toQuery())
153126
.withPageable(pageRequest)
154127
.build();
155128

src/main/java/de/numcodex/feasibility_gui_backend/terminology/es/TerminologyEsService.java

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public class TerminologyEsService {
4343
public static final String FILTER_KEY_TERMINOLOGY = "terminology";
4444
public static final String FIELD_NAME_DISPLAY_DE = "display.de";
4545
public static final String FIELD_NAME_DISPLAY_EN = "display.en";
46-
public static final String FIELD_NAME_DISPLAY_ORIGINAL = "display.original";
46+
public static final String FIELD_NAME_DISPLAY_ORIGINAL_WITH_BOOST = "display.original^0.5";
4747
public static final String FIELD_NAME_TERMCODE_WITH_BOOST = "termcode^2";
4848
private static final UUID NAMESPACE_UUID = UUID.fromString("00000000-0000-0000-0000-000000000000");
4949
private ElasticsearchOperations operations;
@@ -172,38 +172,14 @@ private SearchHits<OntologyListItemDocument> findByNameOrTermcode(String keyword
172172
.filter(filterTerms.isEmpty() ? List.of() : filterTerms)
173173
.build();
174174
} else {
175-
var translationDeExistsQuery = new ExistsQuery.Builder()
176-
.field(FIELD_NAME_DISPLAY_DE)
177-
.build();
178-
179-
var translationEnExistsQuery = new ExistsQuery.Builder()
180-
.field(FIELD_NAME_DISPLAY_EN)
181-
.build();
182-
183-
var mmQueryWithTranslations = new MultiMatchQuery.Builder()
175+
var multiMatchQuery = new MultiMatchQuery.Builder()
184176
.query(keyword)
185-
.fields(List.of(FIELD_NAME_DISPLAY_DE, FIELD_NAME_DISPLAY_EN, FIELD_NAME_TERMCODE_WITH_BOOST))
186-
.build();
187-
188-
var boolQueryWithTranslations = new BoolQuery.Builder()
189-
.should(List.of(translationDeExistsQuery._toQuery(), translationEnExistsQuery._toQuery()))
190-
.must(mmQueryWithTranslations._toQuery())
191-
.build();
192-
193-
var mmQueryWithOriginal = new MultiMatchQuery.Builder()
194-
.query(keyword)
195-
.fields(List.of(FIELD_NAME_DISPLAY_ORIGINAL, FIELD_NAME_TERMCODE_WITH_BOOST))
196-
.build();
197-
198-
var boolQueryWithOriginal = new BoolQuery.Builder()
199-
.mustNot(List.of(translationDeExistsQuery._toQuery(), translationEnExistsQuery._toQuery()))
200-
.must(mmQueryWithOriginal._toQuery())
177+
.fields(List.of(FIELD_NAME_DISPLAY_DE, FIELD_NAME_DISPLAY_EN, FIELD_NAME_TERMCODE_WITH_BOOST, FIELD_NAME_DISPLAY_ORIGINAL_WITH_BOOST))
201178
.build();
202179

203180
boolQuery = new BoolQuery.Builder()
204-
.should(List.of(boolQueryWithTranslations._toQuery(), boolQueryWithOriginal._toQuery()))
181+
.must(multiMatchQuery._toQuery())
205182
.filter(filterTerms.isEmpty() ? List.of() : filterTerms)
206-
.minimumShouldMatch("1")
207183
.build();
208184
}
209185

0 commit comments

Comments
 (0)