gpt4 book ai didi

Django、Haystack、Solr 和 Boosting

转载 作者:行者123 更新时间:2023-12-02 11:52:09 25 4
gpt4 key购买 nike

TLDR;

各种 boosting 类型如何在 django、django-haystack 和 solr 中协同工作?

我无法让最明显的搜索结果首先出现。如果我搜索关心他人并获得 10 个结果,标题为关心他人的对象在结果中出现在关心自己之后的第二个。

文档增强

我的文档提升了Category对象的因子为factor = 2.0 - ((mptt树级别)/10),因此根节点为1.9,第二级为1.8 ,1.7为第三级,依此类推。 (或 190%、180%、170%...等等)

场增强

标题提升了 150% 的 boost=1.5 正因子内容提升了 boost=.5 负因子 50%

术语提升

我目前没有提升任何搜索词。

我的目标

我想要获取类别和文章的结果列表(在直接获得类别结果之前,我会忽略文章)。类别的权重高于文章,标题的权重高于内容。另外,我尝试将根类别节点的权重设置为高于子节点的权重。

我觉得我在某个地方遗漏了一个关键概念。

信息

我正在使用 haystack 的内置搜索表单和搜索 View 。

我正在使用以下包/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 }} 时,记录开始按预期顺序出现。这是为什么?

最佳答案

Dismax 解析器(从 SOLR 3.1 开始还有 ExtendedDismax)正是为了这些需求而创建的。您可以配置要搜索的所有字段(“qf”参数),为每个字段添加自定义增强,并指定短语命中特别有值(value)的字段(添加到命中的分数;“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>

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

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

关于Django、Haystack、Solr 和 Boosting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12271029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com