Sphinx并不总是返回字符串属性

时间:2012-10-31 15:41:01

标签: sphinx

在某些情况下,Sphinx返回的结果没有JOIN'd字段,我已声明为sql_attr_string。例如,采用以下源/索引配置:

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”的查询将返回不具有JOIN'd字符串属性的不完整结果文档(documentA)。

“pizza pocket”的查询将返回包含所有预期JOIN'd属性的同一文档(documentA)。

任何人都能解释这种莫名其妙的行为吗?

1 个答案:

答案 0 :(得分:1)

检查您是否没有重复的ID 你的sql_query必须返回一个带有唯一id的结果,否则Sphinx可以为同一个id提供几个文件(对于Sphinx,id被视为一个简单的数字,不适用任何uniquity规则)。当您编制索引时,应该发出警告,表明您有重复项。