标签: unaccent

在字段上创建不区分大小写和重音/变音符号不敏感的搜索

我想知道在使用全文搜索时创建一个结合两个函数的索引是否有意义:lower(name)f_unaccent(name)Wheref_unaccent只是我的包装器,使 unaccent 函数不可变。

我确实有一个正在处理的索引:f_unaccent(name)使用varchar_pattern_ops. 我的问题是:组合lowerunaccent函数的索引是否会被 full_text_search 触发lower(f_unaccent(name))

我不知道该lower函数是否对全文搜索算法有用。

postgresql index full-text-search unaccent case-sensitive

6
推荐指数
1
解决办法
6825
查看次数

Postgres 全文搜索,带有重音和屈折(共轭等)

我希望能够在 Postgres 中以屈折(波兰)语言搜索无重音的短语。

比如说,如果一个文档包含robi?em,则词位应该是robi?(infinivite)。它的形式有robi?robi?robi?a等等。例如,我希望能够找到它,robie其中包含一个不带重音的短语robi?

我所做的是从一个运行良好的波兰语文本搜索配置开始

CREATE TEXT SEARCH DICTIONARY polish_ispell (
TEMPLATE = pg_catalog.ispell,
dictfile = 'polish', afffile = 'polish', stopwords = 'polish' );
Run Code Online (Sandbox Code Playgroud)

然后我尝试扩展它以包含unaccent.

create extension unaccent;
create text search configuration polish_unaccented (copy = polish);
ALTER TEXT SEARCH CONFIGURATION polish_unaccented   ALTER MAPPING FOR hword, 
hword_part, word WITH unaccen, polish_ispell, simple, ;
Run Code Online (Sandbox Code Playgroud)

遗憾的是,使用此配置无法正确创建词法:

select to_tsvector('polish_unaccented' ,'robi?');

'robil':1
Run Code Online (Sandbox Code Playgroud)

词素当然应该是:

'robi?':1
Run Code Online (Sandbox Code Playgroud)

所以下面不能返回true(这就是我认为我需要的):

select to_tsvector('polish_unaccented','robi?') @@ …
Run Code Online (Sandbox Code Playgroud)

postgresql full-text-search unaccent

5
推荐指数
1
解决办法
2856
查看次数

在创建索引期间“错误:文本搜索字典“unaccent”不存在?

我在 Mac OS X Yosemite 上运行 PostgreSQL 9.3。

我尝试创建一个非重音小写三元组索引。为了实现它,我这样做了:

mydb=# CREATE EXTENSION pg_trgm SCHEMA public VERSION "1.1"; 
       CREATE EXTENSION unaccent SCHEMA public; 
       ALTER FUNCTION unaccent(text) IMMUTABLE;
CREATE EXTENSION
CREATE EXTENSION
ALTER FUNCTION
Run Code Online (Sandbox Code Playgroud)

然后我尝试创建索引:

mydb=# CREATE INDEX author_label_hun_gin_trgm ON address 
       USING gin (public.unaccent(lower(label_hun)) gin_trgm_ops);
ERROR:  text search dictionary "unaccent" does not exist
Run Code Online (Sandbox Code Playgroud)

...并得到这个错误。如果我尝试列出可用的文本搜索词典,该unaccent词典似乎就在那里:

mydb=# \dFd
                             List of text search dictionaries
   Schema   |      Name       |                        Description                        
------------+-----------------+-----------------------------------------------------------
 pg_catalog | danish_stem     | snowball stemmer for danish language
 pg_catalog | dutch_stem      | …
Run Code Online (Sandbox Code Playgroud)

postgresql index index-tuning functions unaccent

4
推荐指数
1
解决办法
1万
查看次数

如何有效地从 Postgres 查询以选择特殊词?

假设我有一个words包含非常多记录的表。
列是idname

words我的表格中,例如:

 'systematic', '????','gear','synthesis','mysterious', etc.  
Run Code Online (Sandbox Code Playgroud)

注意:我们也有 utf8 字样。
如何有效地查询,看看哪些词包含字母's''m''e'(所有的他们)?

输出将是:

systematic,mysterious
Run Code Online (Sandbox Code Playgroud)

我不知道如何做这样的事情。它应该是高效的,否则我们的服务器会受到影响。

postgresql select pattern-matching unaccent

3
推荐指数
1
解决办法
3178
查看次数