2012-10-31 76 views
0

在一些情況下,Sphinx返回的結果沒有JOIN'd字段我聲明爲sql_attr_string's。採取以下源/索引配置爲例如:獅身人面像並不總是返回字符串屬性

source myapp_recipe 
{ 
    type    = pgsql 
    sql_host   = 
    sql_user   = me 
    sql_pass   = secret 
    sql_db    = myapp_db 
    sql_port   = 

    sql_query   = \ 
     SELECT myapp_recipe.id as id, \ 
      myapp_recipe.name as name, \ 
      myapp_recipe.cookbook_id as cookbook_id, \ 
      myapp_cookbook.name as cookbook_name, \ 
      'recipe' as content_type \ 
     FROM myapp_recipe \ 
     INNER JOIN myapp_cookbook \ 
     ON myapp_recipe.cookbook_id = myapp_cookbook.id 

    #content_type for django 
    sql_attr_string  = content_type 

    # stored string fields in the document 
    sql_attr_string  = cookbook_name 

    # stored and indexed string fields 
    sql_field_string  = name 

    # ForeignKey's 
    sql_attr_uint  = cookbook_id 
} 

index myapp_recipe 
{ 
    source   = myapp_recipe 
    path   = /var/data/myapp_recipe 
    docinfo   = extern 
    morphology  = none 
    stopwords  = 
    min_word_len = 2 
    charset_type = utf-8 
    min_prefix_len = 0 
    min_infix_len = 3 
    enable_star  = 0 
} 

對於某些搜索,結果文檔是從content_typename回來而不屬性一邊。對於不同的搜索,返回相同的文檔,Sphinx可能會很好地返回具有所有期望屬性的相同結果文檔。

示例: 對「pizza」的查詢將返回一個不完整的結果文檔(documentA),但不包含JOIN的字符串屬性。

查詢「披薩口袋」將返回相同的文檔(documentA)與所有預期的JOIN'd屬性。

任何人都可以解釋這種莫名其妙的行爲?

回答

1

檢查,如果你沒有重複的ID 你sql_query必須返回唯一ID的結果,否則,獅身人面像可以有相同ID的幾個文件(獅身人面像的ID被看作是一個簡單的數字,不適用任何唯一性規則)。當您編制索引時,應該提示您有重複的警告。

+0

我沒有看到此配置的任何索引警告。我用這樣的調用搜索多個索引:client.Query(「pizza」,「myapp_table1 myapp_table2 myapp_table3」)。這可能與這個問題有關嗎? – patrickn

+0

我有一個偷偷摸摸的懷疑,那就是問題,現在你已經把我放下了這條路 - 當我有來自多個索引的匹配時,問題似乎就會發生。任何想法如何避免這個問題? – patrickn

+0

由於「文檔ID」是postgres中對象的「id」,我不確定如何在查詢多個索引時避免重複的id。 – patrickn