2013-11-22 49 views
3

我正在瀏覽sqlalchemy可搜索的文檔,他們爲同一個類提供了多個搜索向量。爲什麼這會有用?爲什麼我們需要每個班級有多個搜索向量? (sqlalchemy-searchable)

例如(來自文檔)

class Article(Base): 
    __tablename__ = 'article' 

    id = sa.Column(sa.Integer, primary_key=True) 
    name = sa.Column(sa.Unicode(255)) 
    content = sa.Column(sa.UnicodeText) 
    description = sa.Column(sa.UnicodeText) 
    simple_search_vector = sa.Column(TSVectorType('name')) 

    fat_search_vector = sa.Column(
     TSVectorType('name', 'content', 'desription') 
    ) 

我已經有fat_search_vector和包括name。爲什麼simple_search_vector會有用?

回答

2

只是一個瘋狂的猜測:讓你搜索標題(簡單搜索),搜索行(胖搜索)?

+0

確實,但即使是胖的人也有名。這不是浪費嗎?除非你正在執行2次搜索,否則簡單的搜索可能會得到更快的結果?但是我沒有看到任何這樣的用法......如果我誤解了你的觀點,你能解釋一下嗎? – adarsh

+0

我對Python或鍊金術並不熟悉,但我想 - 根據我的答案 - 它實際上實現了兩種搜索方法:一種僅用於標題,另一種用於整行。可以說,具有(標題/ A,關鍵字/ B,描述/ C,內容/ D)的單個加權字段可能更有意義,但是我將圖像庫的作者創建於此之前,並且爲了向後兼容的目的而使用原始API或者是那個順序的東西。 –

2

我使用它的多語言搜索:

class Article(Base): 
    __tablename__ = 'article' 

    id = sa.Column(sa.Integer, primary_key=True) 
    name_en = sa.Column(sa.Unicode(255)) 
    name_es = sa.Column(sa.Unicode(255)) 
    search_vector_es = sa.Column(TSVectorType('name_es')) 
    search_vector_en = sa.Column(TSVectorType('name_en')) 

然而,現在你必須安裝開發版本(從GitHub),以能夠選擇在搜索中使用的載體。

query = db.query(Article) 
vector = getattr(Article, 'search_vector_{0}'.format(lang) 
results = search(query, vector=vector) 
相關問題