String 使用to_tsvector和to_tsquery筛选非罗马字符

String 使用to_tsvector和to_tsquery筛选非罗马字符,string,postgresql,search,normalization,String,Postgresql,Search,Normalization,我想为我的应用程序提供多语言搜索支持 说我需要tsvector和tsquery来正确解析/规范文本。这适用于基于罗马的语言,但不适用于非罗马字符 考虑到这个搜索片段 where to_tsvector(title) @@ to_tsquery('hola') 我正在寻找一个标题“hola mi amiga”,它被找到了。然而,鉴于: where to_tsvector(title) @@ to_tsquery('你') //language = Chinese, Code = zh-CN 我

我想为我的应用程序提供多语言搜索支持

说我需要
tsvector
tsquery
来正确解析/规范文本。这适用于基于罗马的语言,但不适用于非罗马字符

考虑到这个搜索片段

where to_tsvector(title) @@ to_tsquery('hola')
我正在寻找一个标题“hola mi amiga”,它被找到了。然而,鉴于:

where to_tsvector(title) @@ to_tsquery('你') //language = Chinese, Code = zh-CN
我正在寻找
你好嗎并且未找到它


允许字符串规范化处理非罗马字符需要考虑哪些因素?

请确保配置正确

默认\u文本\u搜索\u配置(字符串) 选择文本搜索函数的变体使用的文本搜索配置,这些变体没有指定配置的显式参数。详见第12章。内置默认值为pg_catalog.simple,但如果可以识别与该区域设置匹配的配置,则initdb将使用与所选lc_ctype区域设置相对应的设置初始化配置文件

可以使用查看当前值

SHOW default_text_search_config;
or SELECT get_current_ts_config();
您可以使用
SET default\u text\u search\u config=newconfiguration为会话更改它或者,您可以使用
alterdatabaseset default\u text\u search\u config=newconfiguration

在安装过程中,会选择适当的配置,并在postgresql.conf中相应地设置默认的_text_search_config。如果对整个集群使用相同的文本搜索配置,则可以使用postgresql.conf中的值。要在整个集群中使用不同的配置,但在任何一个数据库中使用相同的配置,请使用ALTER database。。。设置否则,您可以在每个会话中设置默认的\u文本\u搜索\u配置。

依赖于配置的每个文本搜索函数都有一个可选的regconfig参数,因此可以明确指定要使用的配置。仅当省略此参数时,才使用默认的\u文本\u搜索\u配置

您可以使用
\dF
查看已安装的文本搜索配置

那么你想要的是这样的东西

where to_tsvector('newconfig', title) @@ to_tsquery('newconfig', '你')

不知道查询使用什么语言来回答此问题,也不知道什么配置可以正确阻止该语言。

不幸的是,我没有该语言的解决方案。如果有什么可以做的,你必须研究文本搜索配置选项。我的假设是这些好处不会像英语中的那样。好的,在中文中,一个unicode码点代表了字位,你已经传达了整个词位。FTS有点基于利用差异。但是,我从来没有使用过中文。你能进一步解释一下吗,特别是“在中文中,一个unicode码点代表一个字位,而你已经传达了整个词素。FTS是基于利用差异的一种方式”?你是什么意思?我的意思是FTS背后的思想是存储和索引一个单词向量,而不仅仅是一个字符串。这样做效率更高。如果没有“性格”的概念,你在做什么?(我肯定你有一些优势——我只是对它们了解得不够)。如果你有“工程”这个词,它需要很多字符。搜索其他此类案例是一项复杂的任务。如果将其折叠为单个节点,则查找将变得更加容易。在中文里,它们是自然倒塌的你 有意义且不能进一步简化(用于搜索)。Chris我对中文全文搜索扩展名
ZHParser
有问题,正在运行查询
select title from knowledgebase\u topics where to_tsvector('testzhcfg',title)@@to_tsquery('testzhcfg','说话'); 
获取错误
文本搜索查询仅包含停止词或不包含词素,被忽略
,即使我的中文文本包含词素-说话" 意思是说