gpt4 book ai didi

postgresql - 使用连字符和数字进行 Postgres 全文搜索

转载 作者:行者123 更新时间:2023-11-29 12:39:34 25 4
gpt4 key购买 nike

我观察到在我看来 Postgres 的 to_tsvector 函数有一个奇怪的行为。

SELECT to_tsvector('english', 'abc-xyz');

返回

'abc':2 'abc-xyz':1 'xyz':3

但是,

SELECT to_tsvector('english', 'abc-001');

返回

'-001':2 'abc':1

为什么不是这样的呢?

'abc':2 'abc-001':1 '001':3

我应该怎么做才能不带连字符而仅按数字部分进行搜索?

最佳答案

似乎文本搜索解析器将连字符后跟数字识别为有符号整数符号。使用 ts_debug() 调试:

SELECT * FROM ts_debug('english', 'abc-001');

alias | description | token | dictionaries | dictionary | lexemes
-----------+-----------------+-------+--------------+------------+---------
asciiword | Word, all ASCII | abc | {simple} | simple | {abc}
int | Signed integer | -001 | {simple} | simple | {-001}

其他文本搜索配置(例如“simple”而不是“english”)将无济于事,因为解析器本身在这里“有问题”(值得商榷)。

一个简单的解决方法(除了修改解析器,我从未尝试过)是预处理字符串并将连字符替换为 m-dash () 或只是空白以确保这些被标识为“空格符号”。 (实际有符号整数在此过程中会丢失负号。)

SELECT to_tsvector('english', translate('abc-001', '-', '—'))
@@ to_tsquery ('english', '001'); -- true now

db<> fiddle here

关于postgresql - 使用连字符和数字进行 Postgres 全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57795085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com