Skip to content

Commit 53dc256

Browse files
authored
feat(dynamic facets): facet ordering support (#747)
1 parent ddbec57 commit 53dc256

File tree

7 files changed

+258
-1
lines changed

7 files changed

+258
-1
lines changed

algoliasearch-core/src/main/java/com/algolia/search/models/indexing/SearchResult.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.algolia.search.models.indexing;
22

3+
import com.algolia.search.models.rules.RenderingContent;
34
import com.algolia.search.util.AlgoliaUtils;
45
import com.fasterxml.jackson.annotation.JsonSetter;
56
import java.io.Serializable;
@@ -31,6 +32,7 @@ public class SearchResult<T> implements Serializable {
3132
private Boolean exhaustiveNbHits;
3233
private Integer appliedRelevancyStrictness;
3334
private Integer nbSortedHits;
35+
private RenderingContent renderingContent;
3436

3537
public Explain getExplain() {
3638
return explain;
@@ -131,6 +133,15 @@ public SearchResult<T> setQueryAfterRemoval(String queryAfterRemoval) {
131133
return this;
132134
}
133135

136+
public RenderingContent getRenderingContent() {
137+
return renderingContent;
138+
}
139+
140+
public SearchResult<T> setRenderingContent(RenderingContent renderingContent) {
141+
this.renderingContent = renderingContent;
142+
return this;
143+
}
144+
134145
private Long offset;
135146
private Long length;
136147
private String parsedQuery;
@@ -384,6 +395,9 @@ public String toString() {
384395
+ '\''
385396
+ ", nbSortedHits="
386397
+ nbSortedHits
398+
+ '\''
399+
+ ", renderingContent="
400+
+ renderingContent
387401
+ '}';
388402
}
389403
}

algoliasearch-core/src/main/java/com/algolia/search/models/rules/ConsequenceParams.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,16 @@ public ConsequenceParams setAutomaticOptionalFacetFilters(
8484
return this;
8585
}
8686

87+
public RenderingContent getRenderingContent() {
88+
return renderingContent;
89+
}
90+
91+
public ConsequenceParams setRenderingContent(RenderingContent renderingContent) {
92+
this.renderingContent = renderingContent;
93+
return this;
94+
}
95+
96+
private RenderingContent renderingContent;
8797
private ConsequenceQuery query;
8898

8999
@JsonDeserialize(using = AutomaticFacetFilterDeserializer.class)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.algolia.search.models.rules;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import java.io.Serializable;
5+
import java.util.Map;
6+
import java.util.Objects;
7+
8+
/** Facets and facets values ordering rules container. */
9+
@JsonInclude(JsonInclude.Include.NON_NULL)
10+
public class FacetOrdering implements Serializable {
11+
private FacetsOrder facets;
12+
private Map<String, FacetValuesOrder> values;
13+
14+
public FacetOrdering() {}
15+
16+
public FacetOrdering(FacetsOrder facets, Map<String, FacetValuesOrder> values) {
17+
this.facets = facets;
18+
this.values = values;
19+
}
20+
21+
public FacetsOrder getFacets() {
22+
return facets;
23+
}
24+
25+
public FacetOrdering setFacets(FacetsOrder facets) {
26+
this.facets = facets;
27+
return this;
28+
}
29+
30+
public Map<String, FacetValuesOrder> getValues() {
31+
return values;
32+
}
33+
34+
public FacetOrdering setValues(Map<String, FacetValuesOrder> values) {
35+
this.values = values;
36+
return this;
37+
}
38+
39+
@Override
40+
public boolean equals(Object o) {
41+
if (this == o) return true;
42+
if (!(o instanceof FacetOrdering)) return false;
43+
FacetOrdering that = (FacetOrdering) o;
44+
return Objects.equals(facets, that.facets) && Objects.equals(values, that.values);
45+
}
46+
47+
@Override
48+
public int hashCode() {
49+
return Objects.hash(facets, values);
50+
}
51+
52+
@Override
53+
public String toString() {
54+
return "FacetOrdering{" + "facets=" + facets + ", values=" + values + '}';
55+
}
56+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.algolia.search.models.rules;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import java.io.Serializable;
5+
import java.util.List;
6+
import java.util.Objects;
7+
8+
/** Facet values ordering rule container. */
9+
@JsonInclude(JsonInclude.Include.NON_NULL)
10+
public class FacetValuesOrder implements Serializable {
11+
private List<String> order;
12+
private String sortRemainingBy;
13+
14+
public FacetValuesOrder() {}
15+
16+
public FacetValuesOrder(List<String> order, String sortRemainingBy) {
17+
this.order = order;
18+
this.sortRemainingBy = sortRemainingBy;
19+
}
20+
21+
public List<String> getOrder() {
22+
return order;
23+
}
24+
25+
public FacetValuesOrder setOrder(List<String> order) {
26+
this.order = order;
27+
return this;
28+
}
29+
30+
public String getSortRemainingBy() {
31+
return sortRemainingBy;
32+
}
33+
34+
public FacetValuesOrder setSortRemainingBy(String sortRemainingBy) {
35+
this.sortRemainingBy = sortRemainingBy;
36+
return this;
37+
}
38+
39+
@Override
40+
public boolean equals(Object o) {
41+
if (this == o) return true;
42+
if (!(o instanceof FacetValuesOrder)) return false;
43+
FacetValuesOrder that = (FacetValuesOrder) o;
44+
return Objects.equals(order, that.order)
45+
&& Objects.equals(sortRemainingBy, that.sortRemainingBy);
46+
}
47+
48+
@Override
49+
public int hashCode() {
50+
return Objects.hash(order, sortRemainingBy);
51+
}
52+
53+
@Override
54+
public String toString() {
55+
return "FacetValuesOrder{"
56+
+ "order="
57+
+ order
58+
+ ", sortRemainingBy='"
59+
+ sortRemainingBy
60+
+ '\''
61+
+ '}';
62+
}
63+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.algolia.search.models.rules;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import java.io.Serializable;
5+
import java.util.List;
6+
import java.util.Objects;
7+
8+
/** Define or override the way facet attributes are displayed. */
9+
@JsonInclude(JsonInclude.Include.NON_NULL)
10+
public class FacetsOrder implements Serializable {
11+
private List<String> order;
12+
13+
public FacetsOrder() {}
14+
15+
public FacetsOrder(List<String> order) {
16+
this.order = order;
17+
}
18+
19+
public List<String> getOrder() {
20+
return order;
21+
}
22+
23+
public FacetsOrder setOrder(List<String> order) {
24+
this.order = order;
25+
return this;
26+
}
27+
28+
@Override
29+
public boolean equals(Object o) {
30+
if (this == o) return true;
31+
if (!(o instanceof FacetsOrder)) return false;
32+
FacetsOrder that = (FacetsOrder) o;
33+
return Objects.equals(order, that.order);
34+
}
35+
36+
@Override
37+
public int hashCode() {
38+
return Objects.hash(order);
39+
}
40+
41+
@Override
42+
public String toString() {
43+
return "FacetsOrder{" + "order=" + order + '}';
44+
}
45+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.algolia.search.models.rules;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import java.io.Serializable;
5+
import java.util.Objects;
6+
7+
/**
8+
* Content defining how the search interface should be rendered. This is set via the settings for a
9+
* default value and can be overridden via rules.
10+
*/
11+
@JsonInclude(JsonInclude.Include.NON_NULL)
12+
public class RenderingContent implements Serializable {
13+
private FacetOrdering facetOrdering;
14+
15+
public RenderingContent() {}
16+
17+
public RenderingContent(FacetOrdering facetOrdering) {
18+
this.facetOrdering = facetOrdering;
19+
}
20+
21+
public FacetOrdering getFacetOrdering() {
22+
return facetOrdering;
23+
}
24+
25+
public RenderingContent setFacetOrdering(FacetOrdering facetOrdering) {
26+
this.facetOrdering = facetOrdering;
27+
return this;
28+
}
29+
30+
@Override
31+
public boolean equals(Object o) {
32+
if (this == o) return true;
33+
if (!(o instanceof RenderingContent)) return false;
34+
RenderingContent that = (RenderingContent) o;
35+
return Objects.equals(facetOrdering, that.facetOrdering);
36+
}
37+
38+
@Override
39+
public int hashCode() {
40+
return Objects.hash(facetOrdering);
41+
}
42+
43+
@Override
44+
public String toString() {
45+
return "RenderingContent{" + "facetOrdering=" + facetOrdering + '}';
46+
}
47+
}

algoliasearch-core/src/main/java/com/algolia/search/models/settings/IndexSettings.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
package com.algolia.search.models.settings;
22

3-
import com.fasterxml.jackson.annotation.*;
3+
import com.algolia.search.models.rules.RenderingContent;
4+
import com.fasterxml.jackson.annotation.JsonAnyGetter;
5+
import com.fasterxml.jackson.annotation.JsonAnySetter;
6+
import com.fasterxml.jackson.annotation.JsonIgnore;
7+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
8+
import com.fasterxml.jackson.annotation.JsonInclude;
9+
import com.fasterxml.jackson.annotation.JsonProperty;
10+
import com.fasterxml.jackson.annotation.JsonSetter;
411
import java.io.Serializable;
512
import java.util.HashMap;
613
import java.util.List;
@@ -104,6 +111,9 @@ public class IndexSettings implements Serializable {
104111
/* Virtual Indices */
105112
protected Integer relevancyStrictness;
106113

114+
/* Facets Ordering */
115+
private RenderingContent renderingContent;
116+
107117
public List<String> getAttributesForFaceting() {
108118
return attributesForFaceting;
109119
}
@@ -712,6 +722,15 @@ public IndexSettings setRelevancyStrictness(Integer relevancyStrictness) {
712722
return this;
713723
}
714724

725+
public RenderingContent getRenderingContent() {
726+
return renderingContent;
727+
}
728+
729+
public IndexSettings setRenderingContent(RenderingContent renderingContent) {
730+
this.renderingContent = renderingContent;
731+
return this;
732+
}
733+
715734
@Override
716735
public String toString() {
717736
return "IndexSettings{"
@@ -826,6 +845,9 @@ public String toString() {
826845
+ '\''
827846
+ ", decompoundQuery="
828847
+ decompoundQuery
848+
+ '\''
849+
+ ", renderingContent="
850+
+ renderingContent
829851
+ '}';
830852
}
831853
}

0 commit comments

Comments
 (0)