2012-04-16 51 views
0

缺少解釋,我是新來的整個搜索的東西,有一個很難學習大海撈針。(Solr的作爲後端)從草垛文件

這裏是我的乾草堆/ Solr的理解。如果我的理解是錯誤的就可以了
請評論。

Solr
solr是文檔搜索引擎。 (相對於RDBMS)
它允許用戶快速搜索文件的特定期限。(倒指數可用於本)
的Solr還允許小的搜索給出的文檔結構良好(如XML)

草堆
對於某些應用(如eCommerse網站),這將是產品的數據存儲在RDBMS是個好主意。(格式良好的XML也可以工作,但我想這RDBMS在更新優於XML)
如果我們存儲在RDBMS產品的數據,我們可以編寫查詢來獲取用戶查詢數據的初步認識,但它的麻煩。
草垛可以在RDBMS數據轉換成文檔,這樣可以Solr的索引它。 solr索引數據後,大部分搜索可以委託給solr。

這裏談到的問題。

  1. 我可以根據需要創建數據庫模式,但仍然使用haystack/solr嗎?

  2. 假設我有DB模式如下,什麼會我search_indexes.py模樣啓用任何類別面搜索?

...

class Category(models.Model): 
    name = models.CharField(max_length=200) 
    parentCategory = models.ForeignKey('self', null=True, blank=True) 

class Item(models.Model): 
    name = models.CharField(max_length=200) 
    categorys = models.ManyToManyField(Category) 
    details = models.CharField(max_length=1024) 

注意,類別可以嵌套(類別可以有一個父類)。

+1

在代碼之前,開始一個新的段落,內容或'

'來分隔列表和代碼;或縮進代碼兩次(8位) – okm 2012-04-16 12:09:03

+0

@okm:謝謝你的編輯修復! – eugene 2012-04-16 12:11:03

回答

1

Haystack正如其簡要所述,模塊化搜索Django。它着重於緩解構建網站搜索和維護索引的方式,並做得很好。儘管它們的搜索功能在一定程度上重疊,但將它與通用Django ORM進行比較是沒有意義的。
對於你的模型,因爲有多個類別的項目()屬於,你可以嘗試FacetMultiValueField

# in models.py 
class Category(models.Model): 
    # add __unicode__ method 
    def __unicode__(self): 
     return self.name 

# in search_indexes.py 
from haystack.indexes import * 
class ItemIndex(SearchIndex): 
    text = CharField(document=True, use_template=True) 
    name = CharField(model_attr='name') 
    categories = FacetMultiValueField() # or MultiValueField w/ facet=True 

    def prepare_categories(self, obj): 
     return obj.categories.all() 

並按照http://django-haystack.readthedocs.org/en/latest/faceting.html視圖操作SearchQuerySet。

+0

我看到的問題是,類別本身可以有父類別。我如何將其納入search_indexes.py? – eugene 2012-04-17 00:47:43

+0

@Eugene這取決於你的用法。在搜索頁面中,是否要顯示匹配項目類別的父類別。通常它是不必要的,因爲父類別的方面計數等於其子類別的方面計數的總和。 – okm 2012-04-17 04:26:03

+0

我想首先展示頂級類別,並讓用戶深入子類別(您可以將其稱爲一個方面),我很難應該如何編寫我的* _text.txt(用於文本字段的模板),以及如何才能向用戶呈現類別(方面)名稱。 – eugene 2012-04-18 01:25:05