在django上使用sqlite实现重音不敏感搜索



这个问题是关于我之前的问题口音不敏感搜索django sqlite

正如响应中提到的,没有直接的方法可以这样做。我已经想到了一个解决办法,但我不确定是不是一个好办法:

用例:假设数据库有一个表NewsArticles,其中一列是ArticleText。顾名思义,ArticleText包含新闻文章的文本,其中包括几个带有重音字符的单词。假设在一篇主键为aid123的文章的ArticleText中有一个这样的词是Puerto Aisén。现在,用户可以搜索Puerto AisénPuerto Aisen,并且应该能够获得具有PK aid123的文章,并以粗体显示找到的重音单词(<b>Puerto Aisén</b>)。

解决方案:我在表normalizedArticleText中添加了一个列,并使其包含unicode.normalize(重音删除)版本的文本。现在,每当出现搜索查询时,我首先使用s.decode('ascii')确定查询是否包含重音字符,然后在相应的列中进行相应的搜索。

问题:我正在复制整个数据。此外,如果搜索查询是关键字的非重音版本,我就无法将重音关键字加粗。

有什么好的建议吗?我正在使用django与sqlite

尝试使用unicodedata包。下面是Python 3的一个示例:

import unicodedata
unicodedata.normalize('NFD', 'répertoire').encode('ascii', 'ignore')

或者,对于Python 2.7:

import unicodedata
unicodedata.normalize('NFD', u'répertoire').encode('ascii', 'ignore')

其中任何一个都将输出:

'repertoire'

只需将répertoire替换为您的字符串。NFD是归一化的form。您可以在这里阅读更多关于不同形式的规范化:

https://docs.python.org/3/library/unicodedata.html unicodedata.normalizehttps://docs.python.org/2/library/unicodedata.html unicodedata.normalize

祝你好运!

最新更新