2011-12-03 9 views
6

私はDjango Haystack 1.2.5でいくつか問題があります。私は1つのフィールドを増やす必要がありますが、実際には動作しません。私は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') 

誰かが私にHaystack Boostを稼働させるために必要なものを手がかりにすることはできますか?

よろしく、


アップデート1:私は "のjob_title" フィールドに、より重要性を与える必要があります。たとえば、私が "プログラマー"という言葉を探していたら、 "job_title"フィールドに "programmer"という日付を付けた結果を表示し、次に "programmer"という単語を含む結果を最初に表示する必要があります。 "job_description"フィールド。これを達成するには、乾草増強が適切なツールですか?

+0

私はまったく同じ問題を抱えています:フィールドを1つ増やしたいが、ブーストパラメータは何もしていない。クエリーセットで.boost()メソッドを呼び出すと、予測できない結果しか得られません。あなたは解決策を見つけましたか? –

+0

@mixedCase、私はまだ働いていません。私の場合、私が持っている唯一のオプションは、 "dismax" Solr機能を使って生のクエリを実行することですが、私はSolrの詳細を読む時間外でした... –

答えて

6

フィールド定義にboost=1.5を指定すると、Haystackにそのフィールドで「フィールドブースト」を使用するよう指示する方法です。干し草のドキュメントから:

  • 用語ブースト

  • ドキュメントブースト

  • フィールド・ブースト

用語ブースト:

ブーストの3つのタイプがあります。幸せ照会時(検索クエリ実行時)には に基づいてスコアが増加するという特定の単語/フレーズが表示されます。一方

、文書&フィールドブーストは、(文書がインデックスに追加されているとき)インデックス時 を行わ。ドキュメントブーストでは、 の結果全体の関連性が上がります。フィールドブーストでは、そのフィールド内での検索が改善されるのは になります。

コードをフィールドに追加すると、クエリの作成時ではなく、モデルのインデックス作成時にフィールドが向上します。良いことは、あなたが指定したブーストは、そのフィールドで検索が行われたときに引き続き使用されますが、Solrへのクエリで明示的に指定されるのではなく、暗黙的に適用されることです。

あなたが指定したクエリでは、どのフィールドでも検索していないため、強調表示が適用されるとは思われません。

+1

返信いただきありがとうございます。私はインデックスを再構築しましたが、検索結果はモデルに "boost"パラメータを追加する前と同じです。私が気づいたもう一つの事は、モデルで "boost"パラメータを使用した後に "schema.xml"が変更されていないことです。モデルで "build_solr_schema"コマンドを実行しましたが、モデルで "boost"何の効果もありません。誰かがこれについてもっと手掛かりを持っていますか?ありがとう。 –

0

私は同じ問題を抱えていました。モデルに "boost"パラメータを設定しても、 "schema.xml"は変更されませんでした。解決策として、DisMaxクエリモードを使い始めました。このようなものが私のために働いています:

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

私はこれが誰かを助けることを望みます。

+0

どのようにこれを達成するための良いリソースですか?または、より良いソリューションを見つけましたか? – phoenixwizard

+0

何を意味するのかよく分かりません。私は[haystack docs](http://django-haystack.readthedocs.org/en/latest/inputtypes.html)と[dismax wiki](http://wiki.apache.org/solr/DisMaxQParserPlugin)を読んでいます。また、コードを少し変更しました: 'SearchQuerySet()。filter(text = AltParser( 'dismax'、 q、 qf = 'フィールド1^3フィールド2^2テキスト'、 ))' – ambi