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.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 }}时,记录开始按预期的顺序出现。为什么会这样呢?
发布于 2012-09-20 16:46:37
Dismax解析器(另外从Solr3.1开始的ExtendedDismax )就是为满足这些需求而创建的。您可以配置要搜索的所有字段('qf‘参数),为每个字段添加自定义boosting,并指定短语命中特别有价值的字段(添加到命中分数;'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>我不知道干草堆,但它似乎提供了Dismax功能:https://github.com/toastdriven/django-haystack/pull/314
有关Dismax的信息,请参阅此文档(也可以链接到ExtendedDismax ):http://wiki.apache.org/solr/DisMaxQParserPlugin http://wiki.apache.org/solr/ExtendedDisMax
发布于 2012-09-13 04:33:36
看起来你只是想在这里变得太聪明了。
例如,如果您使用的是默认搜索视图,则字段中的字段完全是针。实际上,默认情况下运行的auto_query只使用一个字段进行搜索--只使用这个标记为document=true的字段。而haystack实际上将这个字段命名为content,所以我建议在搜索索引中重命名它,以避免任何可能的冲突。
如果没有帮助(可能不会),您必须创建自定义搜索表单或使用简单的解决方法来实现您想要的内容,方法是在模板中多次放置您想要提升的字段:
{{ object.title }}
{{ object.title }}
{{ object.content }}https://stackoverflow.com/questions/12271029
复制相似问题