首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL中带有前缀词的奇怪行为

PostgreSQL中带有前缀词的奇怪行为
EN

Stack Overflow用户
提问于 2018-01-30 14:53:49
回答 2查看 1.3K关注 0票数 6

当我使用'a:*‘(也是'i:*','s:*','t:*')

代码语言:javascript
复制
SELECT id FROM mv_fulltextsearch1 WHERE to_tsvector(text) @@ to_tsquery('a:*') LIMIT 50;

需要花费很长时间,并经常输出以下PostgreSQL输出

代码语言:javascript
复制
NOTICE:  text-search query contains only stop words or doesn't contain lexemes, ignored

但当我使用“b:*”(与“:*”前面的任何其他字母相同)

代码语言:javascript
复制
SELECT id FROM mv_fulltextsearch1 WHERE to_tsvector(text) @@ to_tsquery('b:*') LIMIT 50;

一切都很好

a,i和不是某种特殊的角色吗?我怎样才能逃避他们/纠正这种奇怪的行为呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-30 19:08:40

使用to_tsvector('simple', text)to_tsquery('simple', 'a:*')

原因是'english‘regconfig删除了止词,而"a“被认为是一个停止词。

但是,“简单”regconfig不会删除停止词。

票数 6
EN

Stack Overflow用户

发布于 2018-01-30 17:26:17

https://www.postgresql.org/docs/current/static/textsearch-controls.html#textsearch-parsing-queries

此外,*还可以附加到一个lexeme以指定前缀匹配:

https://www.postgresql.org/docs/current/static/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES

当基本的tsquery输入以面值接收令牌时,to_tsquery使用指定的或默认的配置将每个令牌规范化为lexeme,并根据配置丢弃任何停止词。

这使我得出结论,您的to_tsqueryaI作为停止词,没有文本可查询.(请参阅上面文档中的the rat and cat示例)

(请不要问什么是t)

如果你(没有to_tsquery,因此停止话语,而不是扔掉)

代码语言:javascript
复制
with c(t) as (values('a an also at bond'),('but by illegal'),('I in it aligator'))
select t,to_tsvector(t) @@ ('a:*')::tsquery from c;

         t         | ?column?
-------------------+----------
 a an also at bond | t
 but by illegal    | f
 I in it aligator  | t
(3 rows)

会管用的..。

关于停止词的参考:

代码语言:javascript
复制
-bash-4.2$ grep "^t$" /usr/share/pgsql93/tsearch_data/english.stop
t

t是.但我不太懂英语的原因。

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

https://stackoverflow.com/questions/48524345

复制
相关文章

相似问题

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