2011-12-03 37 views
6

我在Django Haystack 1.2.5中遇到了一些问题。我需要提高一个领域,但显然不起作用。我正在使用Solr 1.4.1。Django Haystack - 如何增强字段?

我的索引:

class JobsTextIndex(indexes.SearchIndex): 
    text   = indexes.CharField(document=True, use_template=True) 
    job_title  = indexes.CharField(model_attr='job_title', boost=1.50) 
    job_description = indexes.CharField(model_attr='job_description') 
    country_ad  = indexes.CharField(model_attr='country_ad') 
    zone_ad   = indexes.CharField(model_attr='zone_ad', faceted=True) 
    location_ad  = indexes.CharField(model_attr='location_ad', faceted=True) 
    date_inserted = indexes.DateTimeField(model_attr='date_inserted') 

    def index_queryset(self): 
    """Used when the entire index for model is updated.""" 
    return JobsadsText.objects.filter(date_inserted__lte=datetime.datetime.now()) 

我在JOB_TITLE “助推= 1.50”,但这显然它不工作,这是由Solr中生成了什么:

INFO: [core0] webapp=/solr path=/select/ params={facet=on&sort=date_inserted+desc&fl=*+score&start=0&q=arquiteto&facet.field=location_ad_exact&facet.field=zone_ad_exact&wt=json&fq=django_ct:(myapp.jobstext)&rows=20} hits=65 status=0 QTime=5 

的查询我做的是这个:

sqs = SearchQuerySet().facet('zone_ad').facet('location_ad').order_by('-date_inserted') 

有人可以给我什么,我需要得到草堆升压工作的线索?

最好的问候,


更新1:我需要给的 “JOB_TITLE” 领域的重要性。例如,如果我正在搜索单词“程序员”,我需要首先显示按日期排序的“job_title”字段中包含“程序员”的结果,然后显示结果中包含“程序员”字样的结果“job_description”字段。 Haystack助力是实现这一目标的正确工具?

+0

我有完全相同的问题:我想提高一个字段,但boost参数没有做任何事情。在查询集上调用.boost()方法只会产生非常不可预知的结果。你有没有想出一个解决方案? –

+0

@mixedCase,我还没有提升工作。在我的情况下,我唯一的选择是使用“dismax”Solr功能进行原始查询,但我已经没有时间阅读更多关于Solr ... –

回答

6

在您的字段定义中指定boost=1.5是您如何让Haystack在该特定字段上使用“Field boost”。从草堆文档:

有三种类型的提振:

  • 内提振

  • 文件升压

  • 场升压

内提振HAPP在查询时间(当搜索查询运行时)并且是基于增加得分的 是某个词/词组被看见。

在另一方面,文献&场提升在索引时间 (当文件被添加到所述索引)发生。文档增强导致 整个结果的相关性上升,其中场增强导致 只有在该领域内的搜索才能做得更好。

您已经在您的代码中指定了字段提升,这会在模型建立索引时增强字段,而不是在进行查询时增强字段。好消息是,在搜索该字段时仍然会使用您指定的提升,但会隐式应用,而不是在查询中明确指定给Solr。

我不认为你指定的查询会有提升应用到它,虽然你没有在任何领域搜索。

+1

感谢您的回复。我已经重建了索引,但搜索结果与我在模型中添加“boost”参数之前的结果相同。我注意到的另一件事是,在模型中有“boost”参数后,“schema.xml”没有改变,我运行了命令“build_solr_schema”,但是模型中的“boost”没有任何作用。有人对此有更多线索?谢谢。 –

0

我有同样的问题 - “schema.xml”没有改变,我已经在模型中的“boost”参数。作为一种解决方案,我开始使用DisMax查询模式。像这样的东西在为我工作:

SearchQuerySet().filter(text=Raw("{!dismax qf='field1^3 field2^2 text'}" + query)) 

我希望这会帮助别人。

+0

阅读如何实现这一目标的好资源?或者你找到了更好的解决方案? – phoenixwizard

+0

我不确定你的意思。我已阅读[干草堆文档](http://django-haystack.readthedocs.org/en/latest/inputtypes.html)和[dismax wiki](http://wiki.apache.org/solr/DisMaxQParserPlugin)。我还将代码稍微改为:'SearchQuerySet()。filter(text = AltParser( 'dismax', q, qf ='field1^3 field2^2 text', ))' – ambi