Kim*_*Kim 6 postgresql full-text-search amazon-web-services amazon-rds
在多个开发服务器上,此查询已返回预期记录:
SELECT name, name_tsv FROM vision
WHERE name_tsv @@ plainto_tsquery('Washington Square Park');
Run Code Online (Sandbox Code Playgroud)
name_tsv最初是在我的开发服务器上填充的
UPDATE vision SET name_tsv=to_tsvector(name);
Run Code Online (Sandbox Code Playgroud)
并通过触发器保持最新状态.
我在AWS PostgreSQL RDS实例上创建了相同的数据库.dev和RDS postgres版本均为9.3.1.据我所知,每个pg_catalog都有相同的FTS配置,字典,解析器和模板(默认情况下;我没有在这里搞乱任何东西).当然,我无法访问RDS实例上的pg conf文件.在此RDS实例上,上面的查询返回0条记录.
我在两个上运行了这个诊断查询:
SELECT name,
name_tsv,
to_tsvector(name),
plainto_tsquery('Washington Square Park'),
name_tsv @@ plainto_tsquery('Washington Square Park') AS matches_stored_name,
to_tsvector(name) @@ plainto_tsquery('Washington Square Park') AS matches_fresh_tsvector
FROM vision WHERE id_vision = 2977;
Run Code Online (Sandbox Code Playgroud)
RDS实例的结果是:
"1609: Washington Square Park";"'1609':1 'park':4 'squar':3 'washington':2";"'1609':1 'park':4 'square':3 'washington':2";"'washington' & 'square' & 'park'";f;t
Run Code Online (Sandbox Code Playgroud)
dev实例的结果是:
"1609: Washington Square Park";"'1609':1 'park':4 'squar':3 'washington':2";"'1609':1 'park':4 'squar':3 'washington':2";"'washington' & 'squar' & 'park'";t;t
Run Code Online (Sandbox Code Playgroud)
从上面可以看出,在RDS上,to_tsvector()和plainto_tsquery()似乎都不会产生他们在开发服务器上执行的截断的lexeme'quarar'(与其他字符串相同的no-lexeme模式).但是,我试过跑步
UPDATE vision SET name_tsv=to_tsvector(name);
Run Code Online (Sandbox Code Playgroud)
在RDS服务器上,但name_tsv没有改变(仍="'1609':1'停车':4'小方':3'华盛顿':2").
我可以在新的RDS服务器上做什么来使第一个查询以与在我的开发服务器上相同的方式返回预期记录?我想我只是需要做出plainto_tsquery("华盛顿广场公园")归令牌词位(如回归"SQUAR"而不是"方"),但我不能告诉从这个该怎么做.
Cra*_*ger 11
这个查询:
SELECT name, name_tsv FROM vision
WHERE name_tsv @@ plainto_tsquery('Washington Square Park');
Run Code Online (Sandbox Code Playgroud)
使用默认字典.我会说两台机器的默认字典不同.看到:
regress=> SELECT plainto_tsquery('Washington Square Park');
plainto_tsquery
---------------------------------
'washington' & 'squar' & 'park'
(1 row)
regress=> SELECT plainto_tsquery('english', 'Washington Square Park');
plainto_tsquery
---------------------------------
'washington' & 'squar' & 'park'
(1 row)
regress=> SELECT plainto_tsquery('simple', 'Washington Square Park');
plainto_tsquery
----------------------------------
'washington' & 'square' & 'park'
(1 row)
Run Code Online (Sandbox Code Playgroud)
比较运行结果:
SHOW default_text_search_config ;
Run Code Online (Sandbox Code Playgroud)
在两台机器上.Betcha他们是不同的.
| 归档时间: |
|
| 查看次数: |
848 次 |
| 最近记录: |