Question

Je suis avec quelques problèmes dans Django Haystack 1.2.5. Je dois stimuler un champ mais aparently il ne fonctionne pas. J'utilise Solr 1.4.1.

Mon index:

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())

J'ai dans le job_title « boost = 1,50 » mais apparemment il ne fonctionne pas, voici ce qui est généré par 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 

La requête que je fais est celui-ci:

sqs = SearchQuerySet().facet('zone_ad').facet('location_ad').order_by('-date_inserted')

Quelqu'un peut-il me donner une idée sur ce que je dois obtenir Haystack travail Boost?

Cordialement,


Mise à jour 1: Je dois donner plus d'importance dans le champ « job_title ». Si par exemple je recherche le mot « programmeur » Je dois montrer en premier lieu les résultats qui ont « programmeur » dans le champ « job_title » classés par date et les résultats qui ont le mot « programmeur » dans le champ "job_description". Le coup de pouce Haystack est l'outil pour y parvenir?

Était-ce utile?

La solution

Spécification boost=1.5 dans la définition de champ est comment vous dire Haystack utiliser « boost champ » sur ce domaine spécifique. De la documentation Haystack:

Il existe trois types de boost:

  • Boost terme

  • Boost document

  • Boost Le champ

boost à terme se produit au moment de la requête (lorsque la requête de recherche est exécutée) et est basé sur l'augmentation du score est un certain mot / expression est vu.

D'autre part, le document et le terrain boosts ont lieu au moment de l'indexation (Lorsque le document est ajouté à l'indice). causes boost Document la pertinence du résultat entier pour remonter, où les causes d'amplification du champ seules des recherches dans ce domaine à faire mieux.

Vous avez spécifié coup de pouce de champ dans votre code, ce qui augmentera le champ lorsque le modèle est indexé, pas lorsque vous faites votre requête. Les bonnes nouvelles sont que le coup de pouce que vous avez spécifié sera toujours utilisé lorsqu'une recherche est faite sur ce terrain, mais sera appliquée implicitement, plutôt que d'être spécifié explicitement dans la requête Solr.

Je ne pense pas que la question que vous avez spécifié aura le coup de pouce appliqué à ce même si, comme vous ne l'avez pas cherché sur tous les champs.

Autres conseils

J'eu le même problème - paramètre « schema.xml » n'a pas changé après que j'ai eu le « coup de pouce » dans le modèle. En tant que solution que j'ai commencé à utiliser le mode de requête DisMax. Quelque chose comme cela fonctionne pour moi:

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

J'espère que cette quelqu'un aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top