2011-12-03 38 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