当我使用'a:*‘(也是'i:*','s:*','t:*')
SELECT id FROM mv_fulltextsearch1 WHERE to_tsvector(text) @@ to_tsquery('a:*') LIMIT 50;需要花费很长时间,并经常输出以下PostgreSQL输出
NOTICE: text-search query contains only stop words or doesn't contain lexemes, ignored但当我使用“b:*”(与“:*”前面的任何其他字母相同)
SELECT id FROM mv_fulltextsearch1 WHERE to_tsvector(text) @@ to_tsquery('b:*') LIMIT 50;一切都很好
a,i和不是某种特殊的角色吗?我怎样才能逃避他们/纠正这种奇怪的行为呢?
发布于 2018-01-30 19:08:40
使用to_tsvector('simple', text)和to_tsquery('simple', 'a:*')
原因是'english‘regconfig删除了止词,而"a“被认为是一个停止词。
但是,“简单”regconfig不会删除停止词。
发布于 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_tsquery将a和I作为停止词,没有文本可查询.(请参阅上面文档中的the rat and cat示例)
(请不要问什么是t)
如果你(没有to_tsquery,因此停止话语,而不是扔掉)
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)会管用的..。
关于停止词的参考:
-bash-4.2$ grep "^t$" /usr/share/pgsql93/tsearch_data/english.stop
tt是.但我不太懂英语的原因。
https://stackoverflow.com/questions/48524345
复制相似问题