2015-09-25 209 views
1

文本我有類似這樣搜索匹配的搜索在Django模型字段

class Item(models.Model): 
    value = models.IntegerField() 
    words = models.CharField(max_length=512, unique=True) 

我希望能夠通過對象搜索模式,然後返回他針對特定查詢的最佳匹配。 '最佳匹配'可以被定義爲與words字段最接近的基於文本的結果,(我可以編寫一個返回'緊密度'的整數表示沒有問題的函數,模型搜索和緩存是問題)。理想情況下,每次進行搜索時,如果之前已經進行過搜索,則僅搜索自上次查詢以來的新元素(其他結果已被緩存)。我無法找到實現此目的的django模塊。

一些信息: DB:Postgres裏 連接器:psycopg2

+0

我結束了Django插件的彈性搜索,因爲Django內部的模式匹配太昂貴了。 https://www.elastic.co/products/elasticsearch –

回答

0

您可以使用difflib訂購查詢,所以它會把頂部[-1]的最佳匹配。

>>> import difflib 
>>> a = ["spam", "eggs", "spammy", "eggy"] 
>>> b = 'spam' 
>>> sorted(a, key=lambda x: difflib.SequenceMatcher(None, x, b).ratio()) 
['eggy', 'eggs', 'spammy', 'spam'] 
+0

這不是我正在尋找的,因爲它會從我的數據庫中拉取整個數據集,每次執行搜索之後才能夠解析它 –