首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgres同义词和前缀在一起的结果

postgres同义词和前缀在一起的结果
EN

Stack Overflow用户
提问于 2014-06-27 20:17:50
回答 2查看 611关注 0票数 2

我有同义词: lake loch当我在postgres中做fts时,我想得到所有包含‘file’,' lac‘和'loch’的单词(我用同义词作为.syn文件或.rules文件)。然而,我也想得到“湖”开头的单词,比如“湖田”。如果我用同义词,我没有前缀匹配,当我不使用同义词时,我得到前缀匹配.我怎么能两者兼得?有没有一种关闭同义词的方法,所以我做了一个问题来获得同义词,而另一个忽略了它们?我试过“喜欢”和“位置”,但太慢了。

.rules有:莱克湖、湖湖、紫胶湖、湖湖

.syn有:。

我两次都试了,但问题是一样的。如果我在.syn文件中将所有同义词映射到其中一个:莱克湖洛奇湖

..。我会得到'lakefield‘,但不是'lacombe’(我需要他们所有的工作前缀)。

我使用的是PostgreSQL 9.3。

查询是:

代码语言:javascript
复制
select 
    *, 
    ts_rank_cd(to_tsvector('location', name), to_tsquery('location', 'lac:*'),16) as ftsrank
from profile_name 
where iso_code='en-CA' 
  AND to_tsvector('location', name) @@ to_tsquery('location', 'lac:*') 
  AND ts_rank_cd(to_tsvector('location', name), to_tsquery('location', 'lac:*'),16) >= 0
order by ftsrank desc 

profile表有一个要搜索的name字段。

谢谢你,佐里卡

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-06 14:01:19

这就是我解决问题的方法:我添加了一个新的fts (全文搜索)配置,它不使用同义词,并在to_tsquery中引用要搜索的关键字用户上的那个配置。对于上面的例子,如下所示:

代码语言:javascript
复制
select 
    *, 
    ts_rank_cd(to_tsvector('location', name), to_tsquery('location_nosyn', 'lac:*'),16) as ftsrank
from profile_name 
where iso_code='en-CA' 
  AND to_tsvector('location', name) @@ to_tsquery('location_nosyn', 'lac:*') 
  AND ts_rank_cd(to_tsvector('location', name), to_tsquery('location_nosyn', 'lac:*'),16) >= 0
order by ftsrank desc 

..。其中提到了不识别同义词的fts配置。请注意,对于数据库字段“name”,我仍然使用同义词,因此它将从db获取所有同义词。但是,不为关键字使用同义词会使部分匹配正常工作(如果用户输入'lac‘,他们会得到类似于'Lake’的同义词词,但是他们也会得到'Lacey‘而不是'Lakewood’.这正是我所需要的)。

希望这能帮助其他人解决类似的问题。感谢每一个回复的人!

票数 2
EN

Stack Overflow用户

发布于 2014-08-01 01:33:27

您可以不使用查询重写功能吗?

代码语言:javascript
复制
select
ts_rewrite('lake'::tsquery, 'lake'::tsquery, 'lake:* | lac | loch'::tsquery) @@ 'lake'::tsvector, --true
ts_rewrite('lake'::tsquery, 'lake'::tsquery, 'lake:* | lac | loch'::tsquery) @@ 'loch'::tsvector, --true
ts_rewrite('lake'::tsquery, 'lake'::tsquery, 'lake:* | lac | loch'::tsquery) @@ 'lakefield'::tsvector --true

您也可以将查询重写保存在数据库表中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24460151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档