summaryrefslogtreecommitdiff
path: root/redis/commands/search/indexDefinition.py
diff options
context:
space:
mode:
Diffstat (limited to 'redis/commands/search/indexDefinition.py')
-rw-r--r--redis/commands/search/indexDefinition.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/redis/commands/search/indexDefinition.py b/redis/commands/search/indexDefinition.py
new file mode 100644
index 0000000..4fbc609
--- /dev/null
+++ b/redis/commands/search/indexDefinition.py
@@ -0,0 +1,80 @@
+from enum import Enum
+
+
+class IndexType(Enum):
+ """Enum of the currently supported index types."""
+
+ HASH = 1
+ JSON = 2
+
+
+class IndexDefinition(object):
+ """IndexDefinition is used to define a index definition for automatic
+ indexing on Hash or Json update."""
+
+ def __init__(
+ self,
+ prefix=[],
+ filter=None,
+ language_field=None,
+ language=None,
+ score_field=None,
+ score=1.0,
+ payload_field=None,
+ index_type=None,
+ ):
+ self.args = []
+ self._appendIndexType(index_type)
+ self._appendPrefix(prefix)
+ self._appendFilter(filter)
+ self._appendLanguage(language_field, language)
+ self._appendScore(score_field, score)
+ self._appendPayload(payload_field)
+
+ def _appendIndexType(self, index_type):
+ """Append `ON HASH` or `ON JSON` according to the enum."""
+ if index_type is IndexType.HASH:
+ self.args.extend(["ON", "HASH"])
+ elif index_type is IndexType.JSON:
+ self.args.extend(["ON", "JSON"])
+ elif index_type is not None:
+ raise RuntimeError("index_type must be one of {}".
+ format(list(IndexType)))
+
+ def _appendPrefix(self, prefix):
+ """Append PREFIX."""
+ if len(prefix) > 0:
+ self.args.append("PREFIX")
+ self.args.append(len(prefix))
+ for p in prefix:
+ self.args.append(p)
+
+ def _appendFilter(self, filter):
+ """Append FILTER."""
+ if filter is not None:
+ self.args.append("FILTER")
+ self.args.append(filter)
+
+ def _appendLanguage(self, language_field, language):
+ """Append LANGUAGE_FIELD and LANGUAGE."""
+ if language_field is not None:
+ self.args.append("LANGUAGE_FIELD")
+ self.args.append(language_field)
+ if language is not None:
+ self.args.append("LANGUAGE")
+ self.args.append(language)
+
+ def _appendScore(self, score_field, score):
+ """Append SCORE_FIELD and SCORE."""
+ if score_field is not None:
+ self.args.append("SCORE_FIELD")
+ self.args.append(score_field)
+ if score is not None:
+ self.args.append("SCORE")
+ self.args.append(score)
+
+ def _appendPayload(self, payload_field):
+ """Append PAYLOAD_FIELD."""
+ if payload_field is not None:
+ self.args.append("PAYLOAD_FIELD")
+ self.args.append(payload_field)