mirror of
https://github.com/postgres/postgres.git
synced 2025-10-29 22:49:41 +03:00
Add json(b)_to_tsvector function
Jsonb has a complex nature so there isn't best-for-everything way to convert it to tsvector for full text search. Current to_tsvector(json(b)) suggests to convert only string values, but it's possible to index keys, numerics and even booleans value. To solve that json(b)_to_tsvector has a second required argument contained a list of desired types of json fields. Second argument is a jsonb scalar or array right now with possibility to add new options in a future. Bump catalog version Author: Dmitry Dolgov with some editorization by me Reviewed by: Teodor Sigaev Discussion: https://www.postgresql.org/message-id/CA+q6zcXJQbS1b4kJ_HeAOoOc=unfnOrUEL=KGgE32QKDww7d8g@mail.gmail.com
This commit is contained in:
@@ -53,6 +53,6 @@
|
||||
*/
|
||||
|
||||
/* yyyymmddN */
|
||||
#define CATALOG_VERSION_NO 201804071
|
||||
#define CATALOG_VERSION_NO 201804072
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4987,14 +4987,22 @@ DATA(insert OID = 5001 ( phraseto_tsquery PGNSP PGUID 12 100 0 0 0 f f f t f s
|
||||
DESCR("transform to tsquery");
|
||||
DATA(insert OID = 8890 ( websearch_to_tsquery PGNSP PGUID 12 100 0 0 0 f f f t f s s 1 0 3615 "25" _null_ _null_ _null_ _null_ _null_ websearch_to_tsquery _null_ _null_ _null_ ));
|
||||
DESCR("transform to tsquery");
|
||||
DATA(insert OID = 4209 ( to_tsvector PGNSP PGUID 12 100 0 0 0 f f f t f s s 1 0 3614 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_to_tsvector _null_ _null_ _null_ ));
|
||||
DESCR("transform jsonb to tsvector");
|
||||
DATA(insert OID = 4210 ( to_tsvector PGNSP PGUID 12 100 0 0 0 f f f t f s s 1 0 3614 "114" _null_ _null_ _null_ _null_ _null_ json_to_tsvector _null_ _null_ _null_ ));
|
||||
DESCR("transform json to tsvector");
|
||||
DATA(insert OID = 4211 ( to_tsvector PGNSP PGUID 12 100 0 0 0 f f f t f i s 2 0 3614 "3734 3802" _null_ _null_ _null_ _null_ _null_ jsonb_to_tsvector_byid _null_ _null_ _null_ ));
|
||||
DESCR("transform jsonb to tsvector");
|
||||
DATA(insert OID = 4212 ( to_tsvector PGNSP PGUID 12 100 0 0 0 f f f t f i s 2 0 3614 "3734 114" _null_ _null_ _null_ _null_ _null_ json_to_tsvector_byid _null_ _null_ _null_ ));
|
||||
DESCR("transform json to tsvector");
|
||||
DATA(insert OID = 4209 ( to_tsvector PGNSP PGUID 12 100 0 0 0 f f f t f s s 1 0 3614 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_string_to_tsvector _null_ _null_ _null_ ));
|
||||
DESCR("transform string values from jsonb to tsvector");
|
||||
DATA(insert OID = 4213 ( jsonb_to_tsvector PGNSP PGUID 12 100 0 0 0 f f f t f s s 2 0 3614 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_to_tsvector _null_ _null_ _null_ ));
|
||||
DESCR("transform specified values from jsonb to tsvector");
|
||||
DATA(insert OID = 4210 ( to_tsvector PGNSP PGUID 12 100 0 0 0 f f f t f s s 1 0 3614 "114" _null_ _null_ _null_ _null_ _null_ json_string_to_tsvector _null_ _null_ _null_ ));
|
||||
DESCR("transform string values from json to tsvector");
|
||||
DATA(insert OID = 4215 ( json_to_tsvector PGNSP PGUID 12 100 0 0 0 f f f t f s s 2 0 3614 "114 3802" _null_ _null_ _null_ _null_ _null_ json_to_tsvector _null_ _null_ _null_ ));
|
||||
DESCR("transform specified values from json to tsvector");
|
||||
DATA(insert OID = 4211 ( to_tsvector PGNSP PGUID 12 100 0 0 0 f f f t f i s 2 0 3614 "3734 3802" _null_ _null_ _null_ _null_ _null_ jsonb_string_to_tsvector_byid _null_ _null_ _null_ ));
|
||||
DESCR("transform string values from jsonb to tsvector");
|
||||
DATA(insert OID = 4214 ( jsonb_to_tsvector PGNSP PGUID 12 100 0 0 0 f f f t f i s 3 0 3614 "3734 3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_to_tsvector_byid _null_ _null_ _null_ ));
|
||||
DESCR("transform specified values from jsonb to tsvector");
|
||||
DATA(insert OID = 4212 ( to_tsvector PGNSP PGUID 12 100 0 0 0 f f f t f i s 2 0 3614 "3734 114" _null_ _null_ _null_ _null_ _null_ json_string_to_tsvector_byid _null_ _null_ _null_ ));
|
||||
DESCR("transform string values from json to tsvector");
|
||||
DATA(insert OID = 4216 ( json_to_tsvector PGNSP PGUID 12 100 0 0 0 f f f t f i s 3 0 3614 "3734 114 3802" _null_ _null_ _null_ _null_ _null_ json_to_tsvector_byid _null_ _null_ _null_ ));
|
||||
DESCR("transform specified values from json to tsvector");
|
||||
|
||||
DATA(insert OID = 3752 ( tsvector_update_trigger PGNSP PGUID 12 1 0 0 0 f f f f f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ tsvector_update_trigger_byid _null_ _null_ _null_ ));
|
||||
DESCR("trigger for automatic update of tsvector column");
|
||||
|
||||
@@ -132,15 +132,28 @@ extern JsonLexContext *makeJsonLexContextCstringLen(char *json,
|
||||
*/
|
||||
extern bool IsValidJsonNumber(const char *str, int len);
|
||||
|
||||
/* an action that will be applied to each value in iterate_json(b)_string_vaues functions */
|
||||
/*
|
||||
* Flag types for iterate_json(b)_values to specify what elements from a
|
||||
* json(b) document we want to iterate.
|
||||
*/
|
||||
typedef enum JsonToIndex {
|
||||
jtiKey = 0x01,
|
||||
jtiString = 0x02,
|
||||
jtiNumeric = 0x04,
|
||||
jtiBool = 0x08,
|
||||
jtiAll = jtiKey | jtiString | jtiNumeric | jtiBool
|
||||
} JsonToIndex;
|
||||
|
||||
/* an action that will be applied to each value in iterate_json(b)_vaues functions */
|
||||
typedef void (*JsonIterateStringValuesAction) (void *state, char *elem_value, int elem_len);
|
||||
|
||||
/* an action that will be applied to each value in transform_json(b)_string_values functions */
|
||||
/* an action that will be applied to each value in transform_json(b)_values functions */
|
||||
typedef text *(*JsonTransformStringValuesAction) (void *state, char *elem_value, int elem_len);
|
||||
|
||||
extern void iterate_jsonb_string_values(Jsonb *jb, void *state,
|
||||
extern uint32 parse_jsonb_index_flags(Jsonb *jb);
|
||||
extern void iterate_jsonb_values(Jsonb *jb, uint32 flags, void *state,
|
||||
JsonIterateStringValuesAction action);
|
||||
extern void iterate_json_string_values(text *json, void *action_state,
|
||||
extern void iterate_json_values(text *json, uint32 flags, void *action_state,
|
||||
JsonIterateStringValuesAction action);
|
||||
extern Jsonb *transform_jsonb_string_values(Jsonb *jsonb, void *action_state,
|
||||
JsonTransformStringValuesAction transform_action);
|
||||
|
||||
Reference in New Issue
Block a user