Django4.0 搜索-一個(gè)更高級(jí)的數(shù)據(jù)庫(kù)比較函數(shù)

2022-03-16 17:34 更新

在上面的例子中,我們可以確認(rèn)大小寫不敏感的查詢會(huì)更實(shí)用一些。當(dāng)處理英文以外的名字時(shí),可以用無重音比較來優(yōu)化:

>>> Author.objects.filter(name__unaccent__icontains='Helen')
[<Author: Helen Mirren>, <Author: Helena Bonham Carter>, <Author: Hélène Joy>]

這展開了另一個(gè)關(guān)于通過名字的不同拼寫進(jìn)行比較的討論。但這種比較是不對(duì)稱的 —— 篩選 ?Helen ?能拿到 ?Helena ?或 ?Hélène?,但反著來卻不行。還有一個(gè)選項(xiàng)允許使用 ?trigram_similar ?比較,這回比較字母的序列。
例如:

>>> Author.objects.filter(name__unaccent__lower__trigram_similar='Hélène')
[<Author: Helen Mirren>, <Author: Hélène Joy>]

現(xiàn)在還有一個(gè)問題 —— 名字 "Helena Bonham Carter" 有點(diǎn)太長(zhǎng)了,以至于沒有顯示。三元搜索綜合考慮了三種字母的所有組合形式,并同時(shí)再查詢和源字符串中比較了出現(xiàn)的次數(shù)。對(duì)于長(zhǎng)名字,源字符串中包含了更多的組合方式,所以其不再被認(rèn)為是一種近似匹配。
要基于你提供的特定數(shù)據(jù)集合選擇一個(gè)合適的比較函數(shù),例如依據(jù)使用的語言和待搜索的文本。我們見過的所有例子都是關(guān)于短字符串的,這使得用戶可以輸入與源數(shù)據(jù)關(guān)聯(lián)較大(根據(jù)不同的定義)的內(nèi)容。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)