Django Haystack-フィールドをブーストする方法は?
-
27-10-2019 - |
質問
私はDjango Haystack 1.2.5でいくつかの問題を抱えています。私は1つのフィールドを高める必要がありますが、それは機能していません。 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')
誰かが私にヘイスタックのブーストを機能させるために必要なものについて手がかりを与えることができますか?
よろしくお願いします、
更新1:「job_title」フィールドをより重要にする必要があります。たとえば、「プログラマー」という単語を探している場合は、最初に「job_title」フィールドに「プログラマ」がある結果を日付で注文し、次に「プログラマー」という言葉がある結果を表示する必要があります。 「job_description」フィールド。 Haystack Boostは、これを達成するのに適切なツールですか?
解決
指定 boost=1.5
フィールドの定義では、ヘイスタックにその特定のフィールドで「フィールドブースト」を使用するように指示する方法です。 Haystackドキュメントから:
ブーストには3つのタイプがあります。
用語ブースト
ドキュメントブースト
フィールドブースト
用語ブーストはクエリ時に(検索クエリが実行されるとき)に発生し、スコアの増加に基づいていることは、特定の単語/フレーズが見られます。
一方、ドキュメント&フィールドブーストはインデックス作成時に行われます(ドキュメントがインデックスに追加されているとき)。ドキュメントブーストは、結果全体の関連性を引き起こし、フィールドブーストがそのフィールド内の検索のみをより良くするために発生します。
コードでフィールドブーストを指定しました。これにより、クエリを作成するときではなく、モデルがインデックス化されたときにフィールドが向上します。良いニュースは、あなたが指定したブーストは、そのフィールドで検索が行われたときにまだ使用されるが、SolRのクエリで明示的に指定されるのではなく、暗黙的に適用されることです。
あなたが指定したクエリには、どのフィールドでも検索していないため、ブーストが適用されるとは思いません。
他のヒント
私は同じ問題を抱えていました - モデルに「ブースト」パラメーターを持っていた後、「schema.xml」は変更されていません。解決策として、Dismax Queryモードの使用を開始しました。このようなことは私のために働いています:
SearchQuerySet().filter(text=Raw("{!dismax qf='field1^3 field2^2 text'}" + query))
これが誰かを助けることを願っています。