我对Postgresql很新,使用PG 9.6,这是一个示例查询:
select * from (select "posts".* from "posts" inner join "feeds" on posts.destination_feed_ids # feeds.id > 0 and feeds.name='Posts' inner join "users" on feeds.user_id=users.uid and not users.is_private where to_tsvector('pg_catalog.russian', posts.body) @@ to_tsquery('pg_catalog.russian', 'xxx') union select "posts".* from "posts" inner join "feeds" on posts.destination_feed_ids # feeds.id > 0 and feeds.name='Posts' inner join "users" on feeds.user_id=users.uid and not users.is_private where
posts.uid in (
select post_id from comments where to_tsvector('pg_catalog.russian', comments.body) @@ to_tsquery('pg_catalog.russian', 'xxx')
) union select "posts".* from "posts" where "posts"."user_id" = '48d85d83-b562-439f-addf-d75cd75d092f' and to_tsvector('pg_catalog.russian', posts.body) @@ to_tsquery('pg_catalog.russian', 'xxx') union select "posts".* from "posts" where "posts"."user_id" = '48d85d83-b562-439f-addf-d75cd75d092f' and
posts.uid in (
select post_id from comments where to_tsvector('pg_catalog.russian', comments.body) @@ to_tsquery('pg_catalog.russian', 'xxx')
) union select "posts".* from "posts" inner join "feeds" on posts.destination_feed_ids # feeds.id > 0 and feeds.name='Posts' inner join "users" on feeds.user_id=users.uid and users.is_private=true where to_tsvector('pg_catalog.russian', posts.body) @@ to_tsquery('pg_catalog.russian', 'xxx') and "feeds"."id" in (5,10,11,12,15,16,17) union select "posts".* from "posts" inner join "feeds" on posts.destination_feed_ids # feeds.id > 0 and feeds.name='Posts' inner join "users" on feeds.user_id=users.uid and users.is_private=true where
posts.uid in (
select post_id from comments where to_tsvector('pg_catalog.russian', comments.body) @@ to_tsquery('pg_catalog.russian', 'xxx')
)
and "feeds"."id" in (5,10,11,12,15,16,17) ) as found_posts order by found_posts.bumped_at desc offset 0 limit 31
正如您所看到的,有几个pg_catalog.russian
我不理解他们在查询中的角色。目前,该查询未返回' no-ascii'结果。
使用具有以下内容的knex配置文件来构建查询:
textSearchConfigName: 'pg_catalog.russian'
。
我想要的是更改查询(或数据库?),以便它可以查询所有utf8字符串。
答案 0 :(得分:1)
https://www.postgresql.org/docs/9.6/static/textsearch-controls.html
to_tsvector([config regconfig,] document text)返回tsvector to_tsvector将文本文档解析为标记,减少标记 到lexemes,并返回一个将lexemes列在一起的tsvector 他们在文件中的位置。文档已处理完毕 根据指定或默认的文本搜索配置。
并进一步:
解析器,字典以及要索引的标记类型的选择 由所选的文本搜索配置决定(部分 12.7)。可以在同一数据库中具有许多不同的配置,并且可以为各种配置提供预定义的配置 语言。
换句话说,如果删除'pg_catalog.russian'
,将选择默认配置。并且它不会成为"任何语言"之一。
要使用FTS,您需要在使用之前了解该语言。通常,这意味着在保存文本以将其与FTS一起使用时,您可以在下一栏中保存语言,因此您可以使用select to_tsvector(language_column, body)
而不是固定的russian
值...
您也可以want to check the default_text_search_config
选择这些变体使用的文本搜索配置 没有显式参数的文本搜索功能 指定配置。有关详细信息,请参阅第12章。 内置的默认值是pg_catalog.simple,但initdb将初始化 配置文件,其设置对应于所选的 lc_ctype语言环境,如果匹配该语言环境的配置可以 识别。
不确定textSearchConfigName
是否以任何方式影响