Skip to content

Commit e56846a

Browse files
Merge #739
739: Add sort facets value feature r=curquiza a=the-sinner # Pull Request ## Related issue Fixes #634 ## What does this PR do? - added feature to sort facets value by alphanumerical or count order ## PR checklist Please check if your PR fulfills the following requirements: - [x] Does this PR fix an existing issue, or have you listed the changes applied in the PR description (and why they are needed)? - [x] Have you read the contributing guidelines? - [x] Have you made sure that the title is accurate and descriptive of the changes? Thank you so much for contributing to Meilisearch! Co-authored-by: Shalabh Agarwal <[email protected]> Co-authored-by: Shalabh Agarwal <[email protected]>
2 parents f0d6f69 + 7c61f5a commit e56846a

File tree

4 files changed

+63
-0
lines changed

4 files changed

+63
-0
lines changed

.code-samples.meilisearch.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,10 @@ get_faceting_settings_1: |-
286286
update_faceting_settings_1: |-
287287
Faceting newFaceting = new Faceting();
288288
newFaceting.setMaxValuesPerFacet(2);
289+
HashMap<String, FacetSortValue> facetSortValues = new HashMap<>();
290+
facetSortValues.put("*", FacetSortValue.ALPHA);
291+
facetSortValues.put("genres", FacetSortValue.COUNT);
292+
newFaceting.setSortFacetValuesBy(facetSortValues);
289293
client.index("books").updateFacetingSettings(newFaceting);
290294
reset_faceting_settings_1: |-
291295
client.index("books").resetFacetingSettings();
@@ -555,6 +559,9 @@ getting_started_configure_settings: |-
555559
getting_started_faceting: |-
556560
Faceting newFaceting = new Faceting();
557561
newFaceting.setMaxValuesPerFacet(2);
562+
HashMap<String, FacetSortValue> facetSortValues = new HashMap<>();
563+
facetSortValues.put("*", FacetSortValue.COUNT);
564+
newFaceting.setSortFacetValuesBy(facetSortValues);
558565
client.index("movies").updateFacetingSettings(newFaceting);
559566
getting_started_pagination: |-
560567
Pagination newPagination = new Pagination();
@@ -655,6 +662,12 @@ reset_sortable_attributes_1: |-
655662
facet_search_1: |-
656663
FacetSearchRequest fsr = FacetSearchRequest.builder().facetName("genres").facetQuery("fiction").filter(new String[]{"rating > 3"}).build();
657664
client.index("books").facetSearch(fsr);
665+
facet_search_2: |-
666+
Faceting newFaceting = new Faceting();
667+
HashMap<String, FacetSortValue> facetSortValues = new HashMap<>();
668+
facetSortValues.put("genres", FacetSortValue.COUNT);
669+
newFaceting.setSortFacetValuesBy(facetSortValues);
670+
client.index("books").updateFacetingSettings(newFaceting);
658671
facet_search_3: |-
659672
FacetSearchRequest fsr = FacetSearchRequest.builder().facetName("genres").facetQuery("c").build();
660673
client.index("books").facetSearch(fsr);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.meilisearch.sdk.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonValue;
4+
import com.google.gson.annotations.SerializedName;
5+
6+
/**
7+
* Enum for Sorting Facet Values
8+
*
9+
* @see <a href="https://www.meilisearch.com/docs/reference/api/settings#faceting-object">API
10+
* specification</a>
11+
*/
12+
public enum FacetSortValue {
13+
@SerializedName("alpha")
14+
ALPHA("alpha"),
15+
@SerializedName("count")
16+
COUNT("count");
17+
18+
public final String facetSortValue;
19+
20+
FacetSortValue(String facetSortValue) {
21+
this.facetSortValue = facetSortValue;
22+
}
23+
24+
@JsonValue
25+
@Override
26+
public String toString() {
27+
return this.facetSortValue;
28+
}
29+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.meilisearch.sdk.model;
22

3+
import java.util.HashMap;
34
import lombok.Getter;
45
import lombok.Setter;
56

67
@Setter
78
@Getter
89
public class Faceting {
910
protected int maxValuesPerFacet;
11+
protected HashMap<String, FacetSortValue> sortFacetValuesBy;
1012

1113
public Faceting() {}
1214
}

src/test/java/com/meilisearch/integration/SettingsTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
import static org.hamcrest.Matchers.emptyArray;
99
import static org.hamcrest.Matchers.equalTo;
1010
import static org.hamcrest.Matchers.hasKey;
11+
import static org.hamcrest.Matchers.instanceOf;
1112
import static org.hamcrest.Matchers.is;
1213
import static org.hamcrest.Matchers.not;
1314
import static org.hamcrest.Matchers.notNullValue;
1415

1516
import com.meilisearch.integration.classes.AbstractIT;
1617
import com.meilisearch.integration.classes.TestData;
1718
import com.meilisearch.sdk.Index;
19+
import com.meilisearch.sdk.model.FacetSortValue;
1820
import com.meilisearch.sdk.model.Faceting;
1921
import com.meilisearch.sdk.model.Pagination;
2022
import com.meilisearch.sdk.model.Settings;
@@ -1051,6 +1053,11 @@ public void testGetFacetingSettings() throws Exception {
10511053

10521054
assertThat(initialSettings.getFaceting().getMaxValuesPerFacet(), is(equalTo(100)));
10531055
assertThat(initialFaceting.getMaxValuesPerFacet(), is(notNullValue()));
1056+
assertThat(initialFaceting.getSortFacetValuesBy(), is(notNullValue()));
1057+
assertThat(initialSettings.getFaceting().getSortFacetValuesBy(), instanceOf(HashMap.class));
1058+
assertThat(
1059+
initialSettings.getFaceting().getSortFacetValuesBy().get("*"),
1060+
is(FacetSortValue.ALPHA));
10541061
}
10551062

10561063
@Test
@@ -1060,12 +1067,17 @@ public void testUpdateFacetingSettings() throws Exception {
10601067
Faceting newFaceting = new Faceting();
10611068

10621069
int MaxValuesPerFacetTypos = 200;
1070+
HashMap<String, FacetSortValue> facetSortValues = new HashMap<>();
1071+
facetSortValues.put("*", FacetSortValue.COUNT);
10631072

10641073
newFaceting.setMaxValuesPerFacet(MaxValuesPerFacetTypos);
1074+
newFaceting.setSortFacetValuesBy(facetSortValues);
10651075
index.waitForTask(index.updateFacetingSettings(newFaceting).getTaskUid());
10661076
Faceting updatedFaceting = index.getFacetingSettings();
10671077

10681078
assertThat(updatedFaceting.getMaxValuesPerFacet(), is(equalTo(200)));
1079+
assertThat(updatedFaceting.getSortFacetValuesBy(), instanceOf(HashMap.class));
1080+
assertThat(updatedFaceting.getSortFacetValuesBy().get("*"), is(FacetSortValue.COUNT));
10691081
}
10701082

10711083
@Test
@@ -1077,7 +1089,10 @@ public void testResetFacetingSettings() throws Exception {
10771089
Faceting newFaceting = new Faceting();
10781090

10791091
int MaxValuesPerFacetTypos = 200;
1092+
HashMap<String, FacetSortValue> facetSortValues = new HashMap<>();
1093+
facetSortValues.put("*", FacetSortValue.COUNT);
10801094
newFaceting.setMaxValuesPerFacet(MaxValuesPerFacetTypos);
1095+
newFaceting.setSortFacetValuesBy(facetSortValues);
10811096
index.waitForTask(index.updateFacetingSettings(newFaceting).getTaskUid());
10821097
Faceting updatedFaceting = index.getFacetingSettings();
10831098

@@ -1087,6 +1102,10 @@ public void testResetFacetingSettings() throws Exception {
10871102
assertThat(initialFaceting.getMaxValuesPerFacet(), is(equalTo(100)));
10881103
assertThat(updatedFaceting.getMaxValuesPerFacet(), is(equalTo(200)));
10891104
assertThat(facetingAfterReset.getMaxValuesPerFacet(), is(equalTo(100)));
1105+
1106+
assertThat(initialFaceting.getSortFacetValuesBy().get("*"), is(FacetSortValue.ALPHA));
1107+
assertThat(updatedFaceting.getSortFacetValuesBy().get("*"), is(FacetSortValue.COUNT));
1108+
assertThat(facetingAfterReset.getSortFacetValuesBy().get("*"), is(FacetSortValue.ALPHA));
10901109
}
10911110

10921111
/** Tests of the proximity precision setting methods */

0 commit comments

Comments
 (0)