json 上的 Postgres 全文搜索
Postgres full text search on json
我正在将 json 值转储到 text
字段中,因为我有一些无法存储在 json
/jsonb
中的无效 json 数据。我想在以下示例中搜索并突出显示 "Value16": 16711680
,但我也在 "Value20": 16711680
.
上搜索
{
"Value01": 122,
"Value02": 25,
"Value03": 9,
"Value04": 538,
"Value05": false,
"Value06": 65534,
"Value07": 2,
"Value08": 0,
"Value09": 2,
"Value10": 1,
"Value11": 0,
"Value12": 0,
"Value13": false,
"Value14": 0,
"Value15": 0,
"Value16": 16711680,
"Value17": 0,
"Value18": 0,
"Value19": 0,
"Value20": 16711680,
"Value21": 0,
"Value22": 0
}
我尝试了以下查询但没有成功。我需要在这里使用任何转义字符吗?
to_tsquery('Value16<->16711680')
to_tsquery('Value16&16711680')
基本上我只想在键和值一起匹配时点击。
如何在 json 文本中搜索 key/value 对?
由于您的键和值直接相邻,我建议使用 短语搜索(需要 Postgres 9.6 或更高版本):
...
WHERE my_tsvector @@ to_tsquery('simple', 'Value16 <-> 16711680');
或:
...
WHERE my_tsvector @@ phraseto_tsquery('simple','Value16 16711680');
只有相邻的两个搜索词符合条件(忽略中间的干扰字符)。还有运算符的 <N>
变体,用于相隔几个单词的术语。
详细解释:
您甚至可以将其与前缀匹配相结合:
- Match a phrase ending in a prefix with full text search
我正在将 json 值转储到 text
字段中,因为我有一些无法存储在 json
/jsonb
中的无效 json 数据。我想在以下示例中搜索并突出显示 "Value16": 16711680
,但我也在 "Value20": 16711680
.
{
"Value01": 122,
"Value02": 25,
"Value03": 9,
"Value04": 538,
"Value05": false,
"Value06": 65534,
"Value07": 2,
"Value08": 0,
"Value09": 2,
"Value10": 1,
"Value11": 0,
"Value12": 0,
"Value13": false,
"Value14": 0,
"Value15": 0,
"Value16": 16711680,
"Value17": 0,
"Value18": 0,
"Value19": 0,
"Value20": 16711680,
"Value21": 0,
"Value22": 0
}
我尝试了以下查询但没有成功。我需要在这里使用任何转义字符吗?
to_tsquery('Value16<->16711680')
to_tsquery('Value16&16711680')
基本上我只想在键和值一起匹配时点击。
如何在 json 文本中搜索 key/value 对?
由于您的键和值直接相邻,我建议使用 短语搜索(需要 Postgres 9.6 或更高版本):
...
WHERE my_tsvector @@ to_tsquery('simple', 'Value16 <-> 16711680');
或:
...
WHERE my_tsvector @@ phraseto_tsquery('simple','Value16 16711680');
只有相邻的两个搜索词符合条件(忽略中间的干扰字符)。还有运算符的 <N>
变体,用于相隔几个单词的术语。
详细解释:
您甚至可以将其与前缀匹配相结合:
- Match a phrase ending in a prefix with full text search