From f7b87c2bd9bc64f25013d132ad9bade8d3615b34 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Thu, 1 Aug 2024 12:18:05 +0300 Subject: [PATCH] Feature - INDEXMISSING option added in RSearch options. --- .../main/java/org/redisson/RedissonSearch.java | 12 ++++++++++++ .../redisson/api/search/index/GeoIndex.java | 7 +++++++ .../api/search/index/GeoIndexParams.java | 16 +++++++++++++++- .../api/search/index/NumericIndex.java | 7 +++++++ .../api/search/index/NumericIndexParams.java | 14 ++++++++++++++ .../redisson/api/search/index/TagIndex.java | 7 +++++++ .../api/search/index/TagIndexParams.java | 18 ++++++++++++++++++ .../redisson/api/search/index/TextIndex.java | 7 +++++++ .../api/search/index/TextIndexParams.java | 18 ++++++++++++++++++ 9 files changed, 105 insertions(+), 1 deletion(-) diff --git a/redisson/src/main/java/org/redisson/RedissonSearch.java b/redisson/src/main/java/org/redisson/RedissonSearch.java index f36be2c67..a43da3a74 100644 --- a/redisson/src/main/java/org/redisson/RedissonSearch.java +++ b/redisson/src/main/java/org/redisson/RedissonSearch.java @@ -229,6 +229,9 @@ public class RedissonSearch implements RSearch { if (params.isNoIndex()) { args.add("NOINDEX"); } + if (params.isIndexMissing()) { + args.add("INDEXMISSING"); + } } } @@ -250,6 +253,9 @@ public class RedissonSearch implements RSearch { if (params.isNoIndex()) { args.add("NOINDEX"); } + if (params.isIndexMissing()) { + args.add("INDEXMISSING"); + } } } @@ -284,6 +290,9 @@ public class RedissonSearch implements RSearch { if (params.isIndexEmpty()) { args.add("INDEXEMPTY"); } + if (params.isIndexMissing()) { + args.add("INDEXMISSING"); + } } } @@ -322,6 +331,9 @@ public class RedissonSearch implements RSearch { if (params.isIndexEmpty()) { args.add("INDEXEMPTY"); } + if (params.isIndexMissing()) { + args.add("INDEXMISSING"); + } } } diff --git a/redisson/src/main/java/org/redisson/api/search/index/GeoIndex.java b/redisson/src/main/java/org/redisson/api/search/index/GeoIndex.java index 5a51ff91a..a349277fe 100644 --- a/redisson/src/main/java/org/redisson/api/search/index/GeoIndex.java +++ b/redisson/src/main/java/org/redisson/api/search/index/GeoIndex.java @@ -46,4 +46,11 @@ public interface GeoIndex extends FieldIndex { */ GeoIndex noIndex(); + /** + * Defines to index documents that don't contain this attribute + * + * @return options object + */ + GeoIndex indexMissing(); + } diff --git a/redisson/src/main/java/org/redisson/api/search/index/GeoIndexParams.java b/redisson/src/main/java/org/redisson/api/search/index/GeoIndexParams.java index bf7815478..bbc9b36b2 100644 --- a/redisson/src/main/java/org/redisson/api/search/index/GeoIndexParams.java +++ b/redisson/src/main/java/org/redisson/api/search/index/GeoIndexParams.java @@ -26,26 +26,36 @@ public final class GeoIndexParams implements GeoIndex { private boolean noIndex; private String fieldName; private String as; + private boolean indexMissing; - protected GeoIndexParams(String name) { + GeoIndexParams(String name) { this.fieldName = name; } + @Override public GeoIndexParams as(String as) { this.as = as; return this; } + @Override public GeoIndexParams sortMode(SortMode sortMode) { this.sortMode = sortMode; return this; } + @Override public GeoIndexParams noIndex() { this.noIndex = true; return this; } + @Override + public GeoIndexParams indexMissing() { + this.indexMissing = true; + return this; + } + public SortMode getSortMode() { return sortMode; } @@ -61,4 +71,8 @@ public final class GeoIndexParams implements GeoIndex { public String getAs() { return as; } + + public boolean isIndexMissing() { + return indexMissing; + } } diff --git a/redisson/src/main/java/org/redisson/api/search/index/NumericIndex.java b/redisson/src/main/java/org/redisson/api/search/index/NumericIndex.java index 8e62944b9..56d8c92fc 100644 --- a/redisson/src/main/java/org/redisson/api/search/index/NumericIndex.java +++ b/redisson/src/main/java/org/redisson/api/search/index/NumericIndex.java @@ -46,4 +46,11 @@ public interface NumericIndex extends FieldIndex { */ NumericIndex noIndex(); + /** + * Defines to index documents that don't contain this attribute + * + * @return options object + */ + NumericIndex indexMissing(); + } diff --git a/redisson/src/main/java/org/redisson/api/search/index/NumericIndexParams.java b/redisson/src/main/java/org/redisson/api/search/index/NumericIndexParams.java index 1af2f50a9..91d82daaf 100644 --- a/redisson/src/main/java/org/redisson/api/search/index/NumericIndexParams.java +++ b/redisson/src/main/java/org/redisson/api/search/index/NumericIndexParams.java @@ -26,26 +26,36 @@ public final class NumericIndexParams implements NumericIndex { private boolean noIndex; private final String fieldName; private String as; + private boolean indexMissing; NumericIndexParams(String name) { this.fieldName = name; } + @Override public NumericIndexParams as(String as) { this.as = as; return this; } + @Override public NumericIndexParams sortMode(SortMode sortMode) { this.sortMode = sortMode; return this; } + @Override public NumericIndexParams noIndex() { noIndex = true; return this; } + @Override + public NumericIndexParams indexMissing() { + this.indexMissing = true; + return this; + } + public SortMode getSortMode() { return sortMode; } @@ -61,4 +71,8 @@ public final class NumericIndexParams implements NumericIndex { public String getAs() { return as; } + + public boolean isIndexMissing() { + return indexMissing; + } } diff --git a/redisson/src/main/java/org/redisson/api/search/index/TagIndex.java b/redisson/src/main/java/org/redisson/api/search/index/TagIndex.java index edbfa06bd..1cc11d07d 100644 --- a/redisson/src/main/java/org/redisson/api/search/index/TagIndex.java +++ b/redisson/src/main/java/org/redisson/api/search/index/TagIndex.java @@ -79,5 +79,12 @@ public interface TagIndex extends FieldIndex { */ TagIndex indexEmpty(); + /** + * Defines to index documents that don't contain this attribute + * + * @return options object + */ + TagIndex indexMissing(); + } diff --git a/redisson/src/main/java/org/redisson/api/search/index/TagIndexParams.java b/redisson/src/main/java/org/redisson/api/search/index/TagIndexParams.java index bf0efed32..60913843e 100644 --- a/redisson/src/main/java/org/redisson/api/search/index/TagIndexParams.java +++ b/redisson/src/main/java/org/redisson/api/search/index/TagIndexParams.java @@ -30,16 +30,19 @@ public final class TagIndexParams implements TagIndex { private boolean withSuffixTrie; private String separator; private boolean indexEmpty; + private boolean indexMissing; TagIndexParams(String name) { this.fieldName = name; } + @Override public TagIndexParams as(String as) { this.as = as; return this; } + @Override public TagIndexParams separator(String separator) { if (separator.length() != 1) { throw new IllegalArgumentException("Separator should be a single character"); @@ -48,31 +51,42 @@ public final class TagIndexParams implements TagIndex { return this; } + @Override public TagIndexParams sortMode(SortMode sortMode) { this.sortMode = sortMode; return this; } + @Override public TagIndexParams caseSensitive() { caseSensitive = true; return this; } + @Override public TagIndexParams noIndex() { noIndex = true; return this; } + @Override public TagIndexParams withSuffixTrie() { withSuffixTrie = true; return this; } + @Override public TagIndexParams indexEmpty() { this.indexEmpty = true; return this; } + @Override + public TagIndexParams indexMissing() { + this.indexMissing = true; + return this; + } + public String getFieldName() { return fieldName; } @@ -105,5 +119,9 @@ public final class TagIndexParams implements TagIndex { return indexEmpty; } + public boolean isIndexMissing() { + return indexMissing; + } + } diff --git a/redisson/src/main/java/org/redisson/api/search/index/TextIndex.java b/redisson/src/main/java/org/redisson/api/search/index/TextIndex.java index 6b04534ac..78ff2090a 100644 --- a/redisson/src/main/java/org/redisson/api/search/index/TextIndex.java +++ b/redisson/src/main/java/org/redisson/api/search/index/TextIndex.java @@ -84,4 +84,11 @@ public interface TextIndex extends FieldIndex { */ TextIndex indexEmpty(); + /** + * Defines to index documents that don't contain this attribute + * + * @return options object + */ + TextIndex indexMissing(); + } diff --git a/redisson/src/main/java/org/redisson/api/search/index/TextIndexParams.java b/redisson/src/main/java/org/redisson/api/search/index/TextIndexParams.java index 626f9e8e3..a382d7e8b 100644 --- a/redisson/src/main/java/org/redisson/api/search/index/TextIndexParams.java +++ b/redisson/src/main/java/org/redisson/api/search/index/TextIndexParams.java @@ -31,51 +31,66 @@ public final class TextIndexParams implements TextIndex { private boolean withSuffixTrie; private Double weight; private boolean indexEmpty; + private boolean indexMissing; TextIndexParams(String name) { this.fieldName = name; } + @Override public TextIndexParams as(String as) { this.as = as; return this; } + @Override public TextIndexParams sortMode(SortMode sortMode) { this.sortMode = sortMode; return this; } + @Override public TextIndexParams noStem() { noStem = true; return this; } + @Override public TextIndexParams noIndex() { noIndex = true; return this; } + @Override public TextIndexParams withSuffixTrie() { withSuffixTrie = true; return this; } + @Override public TextIndexParams phonetic(PhoneticMatcher matcher) { this.matcher = matcher; return this; } + @Override public TextIndexParams weight(Double weight) { this.weight = weight; return this; } + @Override public TextIndexParams indexEmpty() { this.indexEmpty = true; return this; } + @Override + public TextIndexParams indexMissing() { + this.indexMissing = true; + return this; + } + public String getFieldName() { return fieldName; } @@ -112,4 +127,7 @@ public final class TextIndexParams implements TextIndex { return indexEmpty; } + public boolean isIndexMissing() { + return indexMissing; + } }