图片解析应用
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.4 KiB

  1. from enum import Enum
  2. class IndexType(Enum):
  3. """Enum of the currently supported index types."""
  4. HASH = 1
  5. JSON = 2
  6. class IndexDefinition:
  7. """IndexDefinition is used to define a index definition for automatic
  8. indexing on Hash or Json update."""
  9. def __init__(
  10. self,
  11. prefix=[],
  12. filter=None,
  13. language_field=None,
  14. language=None,
  15. score_field=None,
  16. score=1.0,
  17. payload_field=None,
  18. index_type=None,
  19. ):
  20. self.args = []
  21. self._append_index_type(index_type)
  22. self._append_prefix(prefix)
  23. self._append_filter(filter)
  24. self._append_language(language_field, language)
  25. self._append_score(score_field, score)
  26. self._append_payload(payload_field)
  27. def _append_index_type(self, index_type):
  28. """Append `ON HASH` or `ON JSON` according to the enum."""
  29. if index_type is IndexType.HASH:
  30. self.args.extend(["ON", "HASH"])
  31. elif index_type is IndexType.JSON:
  32. self.args.extend(["ON", "JSON"])
  33. elif index_type is not None:
  34. raise RuntimeError(f"index_type must be one of {list(IndexType)}")
  35. def _append_prefix(self, prefix):
  36. """Append PREFIX."""
  37. if len(prefix) > 0:
  38. self.args.append("PREFIX")
  39. self.args.append(len(prefix))
  40. for p in prefix:
  41. self.args.append(p)
  42. def _append_filter(self, filter):
  43. """Append FILTER."""
  44. if filter is not None:
  45. self.args.append("FILTER")
  46. self.args.append(filter)
  47. def _append_language(self, language_field, language):
  48. """Append LANGUAGE_FIELD and LANGUAGE."""
  49. if language_field is not None:
  50. self.args.append("LANGUAGE_FIELD")
  51. self.args.append(language_field)
  52. if language is not None:
  53. self.args.append("LANGUAGE")
  54. self.args.append(language)
  55. def _append_score(self, score_field, score):
  56. """Append SCORE_FIELD and SCORE."""
  57. if score_field is not None:
  58. self.args.append("SCORE_FIELD")
  59. self.args.append(score_field)
  60. if score is not None:
  61. self.args.append("SCORE")
  62. self.args.append(score)
  63. def _append_payload(self, payload_field):
  64. """Append PAYLOAD_FIELD."""
  65. if payload_field is not None:
  66. self.args.append("PAYLOAD_FIELD")
  67. self.args.append(payload_field)