在我的PostgreSQL 11数据库中,有一个“名称”列,其数据类型为“ tsvector”,用于实现全文搜索。
但是当我尝试将包含冒号“:”的条目添加到此列时,会发生错误:
Exception in thread Thread-10:
Traceback (most recent call last):
File "C:\Program Files\Python37\lib\threading.py", line 917, in_bootstrap_inner
self.run()
File "C:\Program Files\Python37\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\vs\Desktop\Арсений execute\allsave.py", line 209, in group_parsing
VALUES (%s,%s,%s,%s)''', a[i])
psycopg2.ProgrammingError: ERROR: syntax error in tsvector: "Reggae.FM:"
LINE 3: VALUES (181649,'Reggae.FM:'
当我将此数据添加到“文本”字段类型时,没有问题。但是显然“ tsvector”不接受包含冒号“:”以及其他字符的字符串。
问题是,如果“ tsvector”无法存储此类字符,我该如何实施全文搜索?
P.S。使用“文本”或“字符”不是解决方案;搜索此类数据类型非常慢。 我通过解析组vk.com(俄罗斯社交网络),即所有现有组的名称来获得这些行。我需要将这些名称保留完整格式,以便用户可以在我的网站上找到它们。但是任何解决方案都会帮助我。
答案 0 :(得分:1)
使用function someFunction() {
var vOne = document.getElementById("license_type");
var options = vOne.getElementsByTagName("option");
var [c1, c2, c3] = options.map(e => e.getAttribute("data-one"));
}
到normalize the string并返回to_tsvector
:
tsvector
请注意,将tsvector强制转换在这里不起作用:
INSERT INTO ...
VALUES (%s,to_tsvector(%s),%s,%s)''', a[i])
这是unutbu=# select 'Reggae.FM:'::tsvector;
ERROR: syntax error in tsvector: "Reggae.FM:"
LINE 1: select 'Reggae.FM:'::tsvector
^
返回的内容:
to_tsvector