【发布时间】:2012-09-04 20:39:02
【问题描述】:
TLDR;
django、django-haystack 和 solr 中各种 boosting 类型如何协同工作?
我无法让最明显的搜索结果首先出现。如果我搜索caring for others 并得到10 个结果,标题为caring for others 的对象在caring for yourself 之后出现在结果中。
文档提升
我有文档将Category 对象提升为factor = 2.0 - ((the mptt tree level)/10) 的因子,因此根节点为 1.9,第二级为 1.8,第三级为 1.7,依此类推。 (或 190%、180%、170%……等等)
字段提升
标题由boost=1.5 150% 的正因子提升
内容增加了boost=.5 负因子 50%
词条提升
我目前没有提升任何搜索字词。
我的目标
我想获得结果类别和文章的列表(在我直接获得类别结果之前,我会忽略文章)。类别的权重高于文章,标题的权重高于内容。此外,我正在尝试将根类别节点的权重高于子节点。
我觉得我在某处遗漏了一个关键概念。
信息
我正在使用 haystack 的内置搜索表单和搜索视图。
我正在使用以下包/lib 版本:
Django==1.4.1
django-haystack==1.2.7
pysolr==2.1.0-beta
我的索引类
class CategoryIndex(SearchIndex):
"""Categorization -> Category"""
text = CharField(document=True, use_template=True, boost=.5)
title = CharField(model_attr='title', boost=1.5)
content = CharField(model_attr='content', boost=.5)
autocomplete = EdgeNgramField(model_attr='title')
def prepare_title(self, object):
return object.title
def prepare(self, obj):
data = super(CategoryIndex, self).prepare(obj)
base_boost = 2.0
base_boost -= (float(int(obj.level))/10)
data['boost'] = base_boost
return data
我的搜索模板templates/search/categorization/category_text.txt
{{ object.title }}
{{ object.content }}
更新
我注意到,当我从搜索模板中删除 {{ object.content }} 时,这些记录开始按预期顺序出现。这是为什么呢?
【问题讨论】:
标签: django solr django-haystack pysolr