Django Haystack -如何增强一个字段



我在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')

有人能给我一个线索,我需要得到干草堆Boost工作吗?

最诚挚的问候,


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

在字段定义中指定boost=1.5是告诉Haystack在该特定字段上使用' field boost'的方式。来自Haystack文档:

boost有三种类型:

  • Term Boost

  • 文档增加

  • Field Boost

Term boost发生在查询时(运行搜索查询时),并且是基于增加分数是某个单词/短语被看到。

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

您已经在代码中指定了字段boost,这将在模型被索引时增强字段,而不是在您进行查询时。好消息是,当对该字段进行搜索时,仍然会使用您指定的boost,但是将隐式应用,而不是在对Solr的查询中显式指定。

我不认为你所指定的查询将有boost应用到它,虽然你没有搜索任何字段

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

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

我希望这能帮助到大家。

相关内容

  • 没有找到相关文章

最新更新