Python/PHP SQLite查询FTS4/FTS5中的波兰语字母Ł/ł

2024-09-24 02:22:59 发布

您现在位置:Python中文网/ 问答频道 /正文

因为SQLite FTS4/FTS5 tokenizer=unicode61给出了:

a=A=ą=Ą=ä=Ä ...
z=ż=ź=Z=Ż=Ź=Ž=ž ...
etc...

为什么不l=ł=l=Ł???不是虫子吗?在

如何在没有波兰字符的keybord上查询SQLite?例如,查询名称Żabczynski(类似于“zabczynski”)得到结果,但对于名称Włast like“wlast”-0 result(应该像数百…) 我在PHP中进行了漫游,但是它不能处理包含l和ł的单词,比如“opłacalny”。在

^{pr2}$

有什么想法吗?不能在sqlite中设置编码,比如utf8_general_ci、utf8_polish_ci、utf8_unicode_ci。。。或者是的,有可能吗?在

有没有一种方法可以用Python解决它?平台上没有ICU(共享服务器)。在


Tags: 名称cisqliteetcutf8ast字符tokenizer
2条回答

不幸的是,SQLite没有像MySQL那样的排序表,因为它会膨胀一个非常小且可移植的库。在

您可以将查询转换为以下内容:

SELECT * FROM foo WHERE word REGEXP '^[ZŻ]abczy[nń]ski$';
SELECT * FROM foo WHERE word REGEXP '^W[lł]ast$';

在Python中非常简单:

^{pr2}$

同样不幸的是,这将使我们无法在这些字段上使用索引进行搜索。在

更好的方法是执行相反的操作,“ascifify”字符串,并将它们作为附加列输入到数据库中(有自己的索引!);然后“ascifize”您的查询,并观察它的工作情况。更好的是,查看您的“ascified”查询是否与原始查询相同;如果是,则使用“ascified”列(因为用户只输入ASCII字符);如果它们不同,则用户输入波兰语特定字符,并且可能都正确输入,因此请使用原始列。这样,如果用户输入“Żabczynski”,您将在原始列中搜索“Żabczynski”,并在那里找到它。如果用户输入“Zabczynski”,假设它可能是ascified,并在ascified列中搜索;如果有“Zabczynski”、“Zabczynski”、“Żabczynski”和“Zabczynski”。如果用户输入“zabczynski”或“Żabczynski”,大概他们应该知道波兰语,所以在原始列中搜索,没有返回结果。所有这些胜利都是以只存储一个专栏副本为代价的。在

转到MySQL或Postgres。SQLite有其局限性。在

相关问题 更多 >