Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django、Haystack、Solr和Boosting 太长,读不下去了_Django_Solr_Django Haystack_Pysolr - Fatal编程技术网

Django、Haystack、Solr和Boosting 太长,读不下去了

Django、Haystack、Solr和Boosting 太长,读不下去了,django,solr,django-haystack,pysolr,Django,Solr,Django Haystack,Pysolr,在django、django haystack和solr中,各种增压类型是如何协同工作的 我很难让最明显的搜索结果首先出现。如果我搜索关心他人并获得10个结果,则标题为关心他人的对象在结果中显示在关心自己之后的第二个 文档增强 我让文档增强了Category对象的factor=2.0-((mptt树级)/10)so 1.9表示根节点,1.8表示第二级,1.7表示第三级,依此类推。(或190%、180%、170%……等等) 磁场增强 标题增加了150%的正系数boost=1.5 内容增加了boos

在django、django haystack和solr中,各种增压类型是如何协同工作的

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

文档增强 我让文档增强了
Category
对象的
factor=2.0-((mptt树级)/10)
so 1.9表示根节点,1.8表示第二级,1.7表示第三级,依此类推。(或190%、180%、170%……等等)

磁场增强 标题增加了150%的正系数
boost=1.5
内容增加了
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}}
时,记录开始按预期顺序出现。这是为什么呢?

看来你只是想在这些刺激下变得太聪明了

例如,如果您使用默认搜索视图,则字段中的内容将完全无效。事实上,默认情况下运行的auto_查询只使用一个字段进行搜索-仅此字段标记为document=true。haystack实际上在内部命名了这个字段内容,所以我建议在搜索索引中重命名它,以避免任何可能的冲突

若并没有帮助(可能不会),你们必须创建你们的自定义搜索表单,或者使用简单的变通方法,通过在模板中放置你们想要多次提升的字段来实现你们想要的东西:

{{ object.title }}
{{ object.title }}
{{ object.content }}
Demax解析器(在SOLR 3.1上另外扩展了Demax)正是为了满足这些需求而创建的。您可以配置要搜索的所有字段(“qf”参数),为每个字段添加自定义增强,并指定短语命中特别有价值的字段(添加到命中分数中;“pf”参数)。您还可以指定搜索中必须匹配的令牌数量(通过灵活的规则模式;“mm”参数)

e、 g.配置可能如下所示(solrconfig.xml中请求处理程序配置项的一部分-我不熟悉如何使用haystack实现这一点,这是普通的SOLR):

demax
*:*
文本^0.5标题^1.5内容^0.5
文本标题^2内容
*,得分
100%
100
我不知道haystack,但它似乎可以提供Demax功能:

有关Demax,请参阅本文档(它还链接到ExtendedDemax):
http://wiki.apache.org/solr/ExtendedDisMax

将标题两次放在全文记录中似乎是一个非常糟糕的主意。一旦你这样做了,你必须重新索引整个集,如果你改变评分方案。此外,boost是solr的内置部分。其目的是实现动态评分方案。我想知道如何使用这个工具,而不是如何使用它。这表示感谢您的参与。因此,正如我所写,当您搜索所有字段而不是默认字段时,您必须创建自定义搜索表单。我将奖励您奖金,以便代表不会消失在乙醚中。不过我不打算接受这个答案。我仍在等待一个答案,解释boost的正确用法以及boost如何计算到solr分数。谢谢,这指出了一些关于boosting的事情,我还没有听说过。
<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>