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 的内置搜索表单和搜索视图。
我正在使用以下包/库版本:
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 }}
从搜索模板中取出时,这些记录开始以预期的顺序出现。为什么是这样?