Skip to content

Commit 71a39be

Browse files
Fix Elasticsearch namespace filter exact match
1 parent da0987f commit 71a39be

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

server/src/main/java/org/eclipse/openvsx/search/ElasticSearchService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ private ObjectBuilder<BoolQuery> createSearchQuery(BoolQuery.Builder boolQuery,
303303

304304
if (!StringUtils.isEmpty(options.namespace())) {
305305
// Filter by namespace
306-
boolQuery.must(QueryBuilders.term(builder -> builder.field("namespace").value(options.namespace()).caseInsensitive(true)));
306+
boolQuery.must(QueryBuilders.term(builder -> builder.field("namespace.keyword").value(options.namespace()).caseInsensitive(true)));
307307
}
308308
if (!StringUtils.isEmpty(options.category())) {
309309
// Filter by selected category
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
@Test
2+
void namespaceFilterMatchesOnlyExactNamespace() {
3+
4+
Extension vscode = new Extension();
5+
vscode.setNamespace("vscode");
6+
vscode.setName("python");
7+
repositoryService.save(vscode);
8+
9+
Extension msVscode = new Extension();
10+
msVscode.setNamespace("ms-vscode");
11+
msVscode.setName("cpptools");
12+
repositoryService.save(msVscode);
13+
14+
// Rebuild the index so both extensions are searchable
15+
elasticSearchService.updateSearchIndex(true);
16+
17+
// Search using an exact namespace filter
18+
Options options = new Options(
19+
null,
20+
"vscode",
21+
null,
22+
null,
23+
null,
24+
0,
25+
10,
26+
"desc",
27+
SortBy.RELEVANCE
28+
);
29+
30+
SearchResult result = elasticSearchService.search(options);
31+
32+
assertThat(result.extensions())
33+
.extracting(ExtensionSearch::getNamespace)
34+
.contains("vscode")
35+
.doesNotContain("ms-vscode");
36+
}

0 commit comments

Comments
 (0)