2010-10-01 4 views
8

J'ai lu la documentation de démarrage et plusieurs autres exemples sur le web. Et c'est ce que mon search_indexes.py ressemble:Aucun résultat dans la recherche Django Haystack

from haystack.indexes import * 
from haystack import site 
from models import Entry 

class EntryIndex(SearchIndex): 
    text = CharField(document=True) 
    headline = CharField(model_attr='headline') 
    subheadline = CharField(model_attr='subheadline') 
    category = CharField(model_attr='category__name') 

    author = CharField(model_attr='get_author') 
    email = CharField(model_attr='get_email') 

    tags = CharField(model_attr='tags') 

    content = CharField(model_attr='content') 

    def get_queryset(self): 
     return Entry.objects.exclude(dt_published=None).order_by('-is_featured', '-dt_published', '-dt_written', 'headline') 

site.register(Entry, EntryIndex) 

Mais quand je recherche, je reçois aucun résultat. Bizarrement, si j'utilise la phrase de recherche «a» ou n'importe quelle autre lettre, j'obtiens ce qui ressemble à chaque entrée de la fichue chose.

De toute façon ... Il me semble que le moteur de recherche ne regarde pas dans les champs. :/

Tout dessous de cette ligne est moins pertinente (cela fonctionne, faites-moi confiance):


Mon point de vue:

from haystack.views import SearchView 

class CustomSearchView(SearchView): 
    def __name__(self): 
     return "CustomSearchView" 

    def extra_context(self): 
     return common(self.request) 

def search(request): 
    return CustomSearchView(template='news/search_results.html')(request) 

Et search_results.html:

{% extends "content.html" %} 
{% load tagging_tags %} 
{% load highlight %} 


{% block title %}Viðskiptablaðið - Leitarniðurstöður{% endblock %} 

{% block left_content %} 

<h2>Search</h2> 

<form method="get"> 
    <table> 
     {{ form.as_table }} 
     <tr> 
      <td>&nbsp;</td> 
      <td> 
       <input type="submit" value="Search"> 
      </td> 
     </tr> 
    </table> 

    {% if query %} 
     <h3>Results</h3> 

     {% for result in page.object_list %} 
      {% highlight result.summary with request.GET.q %} 
      {% highlight result.object.headline with request.GET.q %} 
      <p> 
       <a href="{{ result.object.get_absolute_url }}">{{ result.object.headline }}</a> 
      </p> 
     {% empty %} 
      <p>No results found.</p> 
     {% endfor %} 

     {% if page.has_previous or page.has_next %} 
      <div> 
       {% if page.has_previous %}<a href="?q={{ query }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; Previous{% if page.has_previous %}</a>{% endif %} 
       | 
       {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}Next &raquo;{% if page.has_next %}</a>{% endif %} 
      </div> 
     {% endif %} 
    {% else %} 
     {# Show some example queries to run, maybe query syntax, something else? #} 
    {% endif %} 
</form> 

{% endblock %} 
+0

Quel moteur de recherche utilisez-vous? Si c'est Solr par exemple, l'avez-vous configuré correctement pour utiliser ces champs? –

Répondre

11

D'accord, c'est dans la documentation mais je pense que ce n'est pas assez clair.

Ce que vous devez faire est de déclarer en quelque sorte les données à rechercher (je pensais que c'était le tout point de:

headline = CharField(model_attr='headline') 
subheadline = CharField(model_attr='subheadline') 

etc ...)

ok, assez de pleurer.

Tout ce que vous avez à faire est

text = CharField(document=True, use_template=True) 

puis faire un modèle, dans mon cas:

Recherche/index/nouvelles/entry_text.txt

{{ object.headline }} 
{{ object.subheadline }} 
{{ object.get_author }} 
{{ object.get_email }} 
{{ object.category.name }} 
{{ object.tags }} 
{{ object.content }} 

Beautiul, il travaux.

Questions connexes