转化后
SELECT to_tsvector('english', 'Google.com');
返回:
'google.com':1
为什么TSearch2引擎没有返回这样的内容?
'google':2, 'com':1
或者我如何让引擎返回我上面写的爆炸字符串? 我只需要通过“谷歌”找到“Google.com”。
答案 0 :(得分:1)
首先,如果你不知道,不推荐使用tsearch2来支持内置功能:
http://www.postgresql.org/docs/9/static/textsearch.html
至于您的实际问题,google.com会被解析器识别为主机:
http://www.postgresql.org/docs/9.0/static/textsearch-parsers.html
如果您不希望发生这种情况,则需要相应地预处理文本(或使用自定义解析器)。
答案 1 :(得分:1)
不幸的是,没有快速简便的解决方案。
Denis是正确的,因为解析器将其识别为主机名,这就是为什么它不会将其分解。
还有其他3件事你可以做,我的头脑。
您可以在数据库中禁用主机解析。有关详细信息,请参阅postgres documentation。例如。像ALTER TEXT SEARCH CONFIGURATION your_parser_config
DROP MAPPING FOR url, url_path
您可以编写自己的自定义词典。
您可以在以某种方式将数据插入数据库之前对其进行预解析(可能在进入数据库之前拆分所有域)。
去年我遇到了类似的问题,并选择了上面的解决方案(2)。
我的解决方案是编写一个自定义词典,将单词分解为非单词字符。自定义词典更容易和更容易写入比新解析器更快。你仍然要写C tho :)
我写的字典会为{www.facebook.com'域返回'www.facebook.com':4, 'com':3, 'facebook':2, 'www':1'
之类的内容(我们有一个独特的场景,因此4个结果而不是3个)。
自定义词典的问题在于您将不再受到干扰(即:www.books.com将以www,books和com形式出现)。我相信有一些工作(可能已经完成)允许链接字典来解决这个问题。