问题标签 [unaccent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
428 浏览

postgresql - 用于字符的 Postgres 非重音函数

我在 Postgres 中使用 unaccent 但它不能转换特殊字符,例如: ù : ù
但是对于 2 个含义相同但代码不同的字符没关系ù: ù
,第一个是字符 u + ̀ 我该
如何解决这个问题?太感谢了。

0 投票
3 回答
2073 浏览

postgresql - Postgres UNACCENT 用于超过 1 个变音符号的字符

UNACCENT函数可以去除字符的变音符号。但是,就我而言,它只能去除带有 1 个变音符号的字符,例如

  • 超人
  • 啊啊啊

对于超过 1 个变音符号的字符,UNACCENT什么都不做,例如

  • 许</li>
  • ầ</li>
  • phố</li>

有没有办法让 Postgres 去除这些字符的重音?

谢谢

0 投票
1 回答
24 浏览

diacritics - 在 tomcat 中部署战争后,Java 文本规范化的行为有所不同

我正在尝试规范化具有重音字符的字符串。它在我的 intellij IDE 上运行良好,但是当我使用 maven 构建它并在 tomcat 中部署战争时,我得到了这样的意外结果。你能帮忙吗?

规范化的 Java 代码

来自 tomcat 日志的输出:

当我在 IDE 中的本地机器上运行相同代码时的输出

我需要在某处指定一些编码设置吗?

我的行家有这个:

这存在于我在 tomcat 中的 server.xml 中

0 投票
1 回答
469 浏览

postgresql - 带有 unaccent 和 pg_trgm 的多列索引(匹配脏数据)

我有一个包含客户数据的表,它有 1200 万多条记录。我想根据几个字段来查询它,例如:first_name、last_name、birth_place。但是数据真的很脏,所以我想要甚至不完全匹配的记录。我为此使用了 unaccent 和 pg_trgm 模块。

我按照这个问题能够在索引中使用 unaccent,因此f_unaccent()而不是unaccent()在查询中。

指数:

选择:

当我对其运行分析时,它会进行顺序扫描。它不使用索引。我知道第一个选择在整个桌子上运行,所以也许很好。我使用的是<->,而不是similarity(text, text)函数,因为我什至想要一些字段相似度为 0 的记录,相似度之和是我关心的。

在真实数据上,这个查询(有 6 个字段,而不是 3 个)大约需要 12 分钟(没有索引,我没有创建它们,因为我在测试数据上看到它们甚至没有被使用......)

我怎样才能使这个查询运行得更快?谢谢

0 投票
1 回答
1041 浏览

postgresql - unaccent() 不适用于 plpgsql 动态查询中的希腊字母

我使用 PostgreSQL 10 并且CREATE EXTENSION unaccent;成功运行。我有一个包含以下内容的 plgsql 函数 whereText := 'lower(unaccent(place.name)) LIKE lower(unaccent($1))';

之后,根据用户的选择,可能会在whereText.

最终whereText在查询中使用:

即使我删除了零件,它whereText := 'LOWER(unaccent(place.name)) LIKE LOWER(unaccent($1))';也不起作用。LOWER

我这样做select __my_function('Τζι');了,但我什么也没得到,即使我应该得到结果,因为在数据库中有名字Τζίμα

如果我删除unaccent并保留它,它LOWER可以工作,但不适用于重音:按原样恢复。似乎是引起了问题。τζΤζίμαunaccent

我错过了什么?我怎样才能解决这个问题?

由于有关于语法和可能的 SQLi 的评论,我提供了整个函数定义,现在更改为在希腊语中不区分重音和不区分大小写:

0 投票
0 回答
273 浏览

postgresql - pg-promise 查询中的通配符和非重音

我使用 pg-promise@8.4.4 并且我想要通配符和unaccentPostgreSQL 的功能。

我的pl/pgsql查询有类似

WHERE unaccent(p.name) ILIKE (''%'' || unaccent($1) || ''%'')'

我想把它变成一个 pg-promise 查询,比如

uniqueQuery('select id, name from place WHERE unaccent(name) ILIKE \'% unaccent($1) #%\' ', [name])

没有unaccent它工作正常。当我添加时unaccent,我得到一个语法错误:(error: syntax error at or near "ονομα μερους"ονομα μερους我正在搜索的字符串)。

如何将通配符与unaccent?

谢谢

0 投票
1 回答
534 浏览

postgresql - Amazon RDS + PostgreSQL + 重音 + 喜欢

我在使用标题中描述的配置时遇到了很多麻烦。

我的问题 :

  • 我在 AWS RDS 中有一个 PostgreSQL DB 10.0
  • 数据库配置为 UTF-8
  • 我有一张用法语描述疾病的表格(所以,有口音)
  • 我想查找描述中包含特定单词的所有代码

例如,我的搜索是 : SELECT * FROM cim10 WHERE description LIKE '%anémie%' ORDER BY weight DESC效果很好。

问题是当我想要寻找 '%anemie%' (没有重音)时获得相同的结果。

我发现 AWS RDS 安装了 unaccent 模块,它可以解决我的问题,但是当我尝试它时,我的 lambda 函数出现错误:

在此处输入图像描述

有人可以帮我找出解决方案吗?非常感谢

0 投票
0 回答
139 浏览

python - django.contrib.postgres 在 Heroku Django 上丢失/未安装

我正在使用 Postgres 的 unaccent 扩展并遵循所有文档以使其工作(通过 CREATE EXTENSION 直接安装扩展并将 django.contrib.postgres 放在 django 设置中的 INSTALLED_APPS 中)。

在本地环境中,它运行良好,但是在构建应用程序并将其部署到 Heroku 之后,它看起来好像没有安装 django.contrib.postgres。因此,当我尝试使用使用 unaccent 查询的应用程序的功能时,当您在 INSTALLED_APPS 中没有 django.contrib.postgres 时,会出现“不支持的 CharField 查找 'unaccent'”。

在本地环境中的 python shell 打印 settings.INSTALLED_APPS 显示 django.contrib.postgres 在那里,但在 Heroku 上运行它显示它丢失了。heroku/python 的构建包不支持它还是我缺少一些配置?

我尝试为早期版本的 Django 安装 django-contrib-postgres 反向端口(将其放在 requirements.txt 中),但无济于事。Python 版本是 3.6.7,Django 是 2.1.2。使用带有 UnaccentExtension 的迁移创建扩展也不会改变任何东西,我确信这不是 Postgres 问题,因为使用 unaccent(columnname) 直接在数据库上查询可以按预期工作。

提前致谢。

编辑:Azure DevOps Pipelines 和 requirements.txt 的 YAML 定义

要求.txt

建造

释放(键和名称用 * 隐藏)

0 投票
1 回答
1067 浏览

laravel - 在 Laravel Eloquent Query 中使用 unaccent PostgreSQL 函数

在尝试从数据库中检索记录时,我无法使用 pgsql 扩展 unaccent。

我在我的应用程序中设置了一个动态搜索,它使用 Ajax 发送用户在字段中键入的内容以及选择的字段。在将字符串发送到我的控制器之前,我将字符串中的每个重音替换为 javascript 函数。

我的问题是我不知道如何让 postgre 明白它应该忽略重音符号。

我尝试使用 Eloquent 的 whereRaw 来使用 unaccent(我激活的)功能,但没有成功。

0 投票
3 回答
301 浏览

postgresql - Postgresql levenshtein 和预组合字符与组合字符

我有包含两个相似字符的字符串。两者都显示为带有 ogonek 的小 'a':

一种

一种

(注意:根据渲染器的不同,它们有时呈现相似,有时略有不同)

但是,它们是不同的:

第一个字符的特点:

在 PostgreSQL 中:

十六进制的 UTF-8 编码是:\xC4\x85

所以它是一个预先组合的字符https://en.wikipedia.org/wiki/Precomposed_character

第二个角色的特点:

在 PostgreSQL 中:

(与字符“a”相同)

这强烈表明渲染的字符是由两个字符组合而成的。它确实是:

十六进制的 UTF-8 编码是:\x61\xCC\xA8

所以它是一个组合

一种\x61\

和一个组合字符https://en.wikipedia.org/wiki/Combining_character),单独的 ogonek:

̨\xCC\xA8

我想使用 PostgreSQL 的levenshtein函数来确定单词的相似性,所以我想将两个字符视为相同(因为它当然是由使用第一个或第二个字符写一个独特实体名称的人所打算的) .

我认为我可以使用unaccent来始终摆脱 ogonek,但这在第二种情况下不起作用:

第一个字符:预期结果:

第一个字符:预期结果:

第二个字符:预期结果:

第二个字符:意外结果:

因此,当我将这两个字符与levenshteinunaccent进行比较时,结果为 1:

而不是 0。

在第二种情况下,我怎样才能“摆脱 ogonek”?

(如何)我可以使用字符串的 UTF-8 代码来获得实现的结果吗?

编辑:正如@s-man 建议的那样,添加组合字符unaccent.rules将解决这个特定问题。但是要普遍解决 unaccent 的组合字符与组合字符问题,我必须在配置中显式添加/修改每个丢失/“错误配置”的组合字符。