Django Haystack - 如何提升领域?

时间:2011-12-03 13:51:33

标签: django solr django-haystack solr-boost

我在Django Haystack 1.2.5中遇到了一些问题。我需要提升一个领域,但显然它不起作用。我正在使用Solr 1.4.1。

我的索引:

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“boost = 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')

有人能给我一些关于Haystack Boost工作所需要的线索吗?

最诚挚的问候,


更新1:我需要更加重视“job_title”字段。例如,如果我正在搜索“程序员”这个词,我首先需要显示在“job_title”字段中按“日期”排序的“程序员”的结果,然后是“程序员”字样的结果。 “job_description”字段。干草堆的提升是实现这一目标的正确工具吗?

2 个答案:

答案 0 :(得分:6)

在字段定义中指定boost=1.5是告诉Haystack在该特定字段上使用“字段提升”的方式。从Haystack文档:

  

有三种类型的提升:

     
      
  • Term Boost

  •   
  • 文件提升

  •   
  • Field Boost

  •   
     

术语提升发生在查询时(运行搜索查询时)并且是   基于增加分数是一个单词/短语被看到。

     

另一方面,文件&字段提升发生在索引时间   (当文档被添加到索引时)。文件提升原因   场地提升导致整个结果的相关性上升   只在该字段内搜索才能做得更好。

您已在代码中指定了字段提升,这将在模型编制索引时提升字段,而不是在您进行查询时。好消息是,在对该字段进行搜索时仍将使用您指定的提升,但是将隐式应用,而不是在对Solr的查询中明确指定。

我不认为您指定的查询会对其应用提升,但您没有在任何字段上搜索过。

答案 1 :(得分:0)

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

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

我希望这会对某人有所帮助。