Django,Haystack,Solr和Boosting

Fra*_*llo 9 django solr pysolr django-haystack

TLDR;

各种助推类型如何在django,django-haystack和solr中协同工作?

我无法将最明显的搜索结果首先显示出来.如果我搜索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.5150%的正面因素推动了产权提升boost=.550%的负面因素

期限提升

我目前没有提高任何搜索条件.

我的目标

我想得到一个结果列表类别和文章(我忽略文章,直到我得到我的类别结果直接).类别加权高于文章,标题加权高于内容.此外,我正在尝试将根类别节点加权高于子节点.

我觉得我在某个地方错过了一个关键概念.

信息

我正在使用haystack的内置搜索表单和搜索视图.

我正在使用以下package/lib版本:

Django==1.4.1
django-haystack==1.2.7
pysolr==2.1.0-beta
Run Code Online (Sandbox Code Playgroud)

我的索引类

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
Run Code Online (Sandbox Code Playgroud)

我的搜索模板 templates/search/categorization/category_text.txt

{{ object.title }}
{{ object.content }}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我注意到,当我{{ object.content }}取出搜索模板时,记录开始以预期的顺序出现.为什么是这样?

Ris*_*nha 2

Dismax 解析器(从 SOLR 3.1 开始还有 ExtendedDismax)正是为了这些需求而创建的。您可以配置要搜索的所有字段(“qf”参数),为每个字段添加自定义增强,并指定短语命中特别有价值的字段(添加到命中的分数;“pf”参数)。您还可以指定搜索中必须匹配的标记数量(通过灵活的规则模式;“mm”参数)。

例如,配置可能如下所示(solrconfig.xml 中请求处理程序配置条目的一部分 - 我不熟悉如何使用 haystack 做到这一点,这是普通的 SOLR):

<str name="defType">dismax</str>
<str name="q.alt">*:*</str>
<str name="qf">text^0.5 title^1.5 content^0.5</str>
<str name="pf">text title^2 content</str>
<str name="fl">*,score</str>
<str name="mm">100%</str>
<int name="ps">100</int>
Run Code Online (Sandbox Code Playgroud)

我不知道 haystack 但它似乎会提供 Dismax 功能: https: //github.com/toastdriven/django-haystack/pull/314

请参阅 Dismax 的此文档(它也链接到 ExtendedDismax): http://wiki.apache.org/solr/DisMaxQParserPlugin http://wiki.apache.org/solr/ExtendedDisMax