在某些情况下,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_type
和name
之外,结果文档将返回没有属性。对于返回相同文档的其他搜索,Sphinx可能会返回具有所有预期属性的相同结果文档。
实施例: 对“pizza”的查询将返回不具有JOIN'd字符串属性的不完整结果文档(documentA)。
“pizza pocket”的查询将返回包含所有预期JOIN'd属性的同一文档(documentA)。
任何人都能解释这种莫名其妙的行为吗?
答案 0 :(得分:1)
检查您是否没有重复的ID 你的sql_query必须返回一个带有唯一id的结果,否则Sphinx可以为同一个id提供几个文件(对于Sphinx,id被视为一个简单的数字,不适用任何uniquity规则)。当您编制索引时,应该发出警告,表明您有重复项。