11"""A module to specify fts index parameters"""
22from enum import Enum
3- from typing import List , Optional
3+ from typing import List , Optional , Union
44
55class FtsParser (Enum ):
6+ """Built-in full-text search parser types supported by OceanBase"""
67 IK = 0
78 NGRAM = 1
9+ NGRAM2 = 2 # NGRAM2 parser (supported from V4.3.5 BP2+)
10+ BASIC_ENGLISH = 3 # Basic English parser
11+ JIEBA = 4 # jieba parser
812
913
1014class FtsIndexParam :
15+ """Full-text search index parameter.
16+
17+ Args:
18+ index_name: Index name
19+ field_names: List of field names to create full-text index on
20+ parser_type: Parser type, can be FtsParser enum or string (for custom parsers)
21+ If None, uses default Space parser
22+ """
1123 def __init__ (
1224 self ,
1325 index_name : str ,
1426 field_names : List [str ],
15- parser_type : Optional [FtsParser ] ,
27+ parser_type : Optional [Union [ FtsParser , str ]] = None ,
1628 ):
1729 self .index_name = index_name
1830 self .field_names = field_names
1931 self .parser_type = parser_type
2032
21- def param_str (self ) -> str | None :
22- if self .parser_type == FtsParser .IK :
23- return "ik"
24- if self .parser_type == FtsParser .NGRAM :
25- return "ngram"
33+ def param_str (self ) -> Optional [str ]:
34+ """Convert parser type to string format for SQL."""
35+ if self .parser_type is None :
36+ return None # Default Space parser, no need to specify
37+
38+ if isinstance (self .parser_type , str ):
39+ # Custom parser name (e.g., "thai_ftparser")
40+ return self .parser_type .lower ()
41+
42+ if isinstance (self .parser_type , FtsParser ):
43+ if self .parser_type == FtsParser .IK :
44+ return "ik"
45+ if self .parser_type == FtsParser .NGRAM :
46+ return "ngram"
47+ if self .parser_type == FtsParser .NGRAM2 :
48+ return "ngram2"
49+ if self .parser_type == FtsParser .BASIC_ENGLISH :
50+ return "beng"
51+ if self .parser_type == FtsParser .JIEBA :
52+ return "jieba"
53+
2654 return None
2755
2856 def __iter__ (self ):
@@ -34,7 +62,7 @@ def __iter__(self):
3462 def __str__ (self ):
3563 return str (dict (self ))
3664
37- def __eq__ (self , other : None ) :
65+ def __eq__ (self , other : object ) -> bool :
3866 if isinstance (other , self .__class__ ):
3967 return dict (self ) == dict (other )
4068
0 commit comments