我在Django中有產品數據庫。產品名稱Eg-(ABCD-E34F)。如果用戶搜索'abcd34',我將如何獲得ABCD-E34F產品的對象。用django在數據庫中搜索字符串。 icontains和iexact查找不符合我的要求
回答
正如人們所建議的那樣,這將需要您考慮構建一些適合您需求的東西。我建議使用模糊匹配,它可以提供與您比較的任何相似性分數。
有一個python包顯示了一些很好的例子&可能適合您的要求; https://pypi.python.org/pypi/fuzzywuzzy
>>> choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
>>> process.extract("new york jets", choices, limit=2)
[('New York Jets', 100), ('New York Giants', 78)]
>>> process.extractOne("cowboys", choices)
("Dallas Cowboys", 90)
>>> process.extractOne("System of a down - Hypnotize - Heroin", songs)
('/music/library/good/System of a Down/2005 - Hypnotize/01 - Attack.mp3', 86)
>>> process.extractOne("System of a down - Hypnotize - Heroin", songs, scorer=fuzz.token_sort_ratio)
("/music/library/good/System of a Down/2005 - Hypnotize/10 - She's Like Heroin.mp3", 61)
只需要注意 - 這會將所有內容從數據庫級別移動到應用程序級別,儘管...因此最有可能不會擴展...... OP可能希望應用某種級別的過濾來減少應用程序從中檢索的選項DB首先...(在這一點上 - 他們可能會找到合適的解決方案......) –
是的,但是沒有辦法與ORM模糊匹配嗎?如果'icontains'不能削減它,你必須接受性能問題。 –
不是ORM原生的 - 但取決於數據庫後端 - 它可能有一個FT索引,它可以使用自定義提取器...甚至我在OPs示例中的第一個想法是將它分成兩個塊,其長度超過4然後嘗試'model.objects.filter(name__icontains = first_half).filter(name__icontains = second_half)'或者其他東西......但是誰知道,卻不知道什麼是合理的輸入以及哪些選項可用/實用的後端明智...... –
- 1. Django查找類型(「iexact」,「icontains」,「month」等)不能在Django nonrel中使用(使用dbindexer)
- 2. 在數據庫中搜索字符串
- 3. 在sqlite數據庫中搜索字符串的任何組合
- 4. 在數據庫列中查找字符串django查詢
- 5. 搜索字符串數據庫
- 6. 如何在數據庫中查找只有一個字符與搜索字符串不同的記錄?
- 7. 如何在TFS代碼中查找搜索字符串搜索
- 8. django在字符串中搜索字符串
- 9. 基於文本框和字符串在數據庫中搜索的查詢
- 10. 搜索字符串集合
- 11. 數據包中的字符串搜索
- 12. 與__in查找Django的icontains
- 13. 搜索來查找字符串
- 14. 使用oci_bind_by_name在Oracle數據庫中搜索字符串
- 15. 在MySQL數據庫中搜索輸入字符串中的值
- 16. 在數據庫中搜索字符串中的單詞
- 17. MATLAB:如何查找數字和字符串混合的數據?
- 18. 查詢搜索數據庫的文本字符串
- 19. 在MySQL數據庫中使用普通字符串查找utf8字符串
- 20. sed命令來搜索字符串和搜索的字符串
- 21. 搜索數據庫字符串包含字符
- 22. 搜索字符串中的字符串
- 23. 在完整的MS Access數據庫中搜索字符串
- 24. 在Mysql數據庫中搜索字符串的速度更快
- 25. 如何在特定的字符串中搜索MySQL數據庫
- 26. 查找具有特定要求的字符串的索引?
- 27. 在數據庫中搜索用戶查詢字符串的地址
- 28. PHP:關鍵字搜索:在字符串中查找子字符串
- 29. 搜索dll集合中的字符串
- 30. PHP:搜索字符串中的巧合
如果你正在尋找一些你必須搜索的東西類似。 'icontains'會很好,如果他們只是搜索'abcd',如果他們想添加額外的,我會打電話給用戶錯誤,因爲它不再類似於他們想要的。 –
您可以限制用戶按預期進行搜索,也可以猜測用戶可能從輸入中獲得什麼,並構建自己的篩選方法... –
然後,您必須編寫自己的自定義搜索算法。正如@JonClements所示。 – cezar