2010-10-01 16 views
8

He leído la documentación de inicio y muchos otros ejemplos en la web. Y esto es lo que mi search_indexes.py parece:No hay resultados en Django Haystack search

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) 

Pero cuando lo busco, no da resultados positivos. Curiosamente, aunque utilizo la frase de búsqueda 'a' o cualquier otra letra, obtengo lo que se parece a cada entrada en esta maldita cosa.

De todos modos ... Me parece que el motor de búsqueda no está buscando en ninguno de los campos. :/

Cualquier cosa por debajo de esta línea es menos relevante (funciona, confía en mí):


Mi opinión:

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) 

Y 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

¿Qué motor de búsqueda está utilizando? Si es Solr, por ejemplo, ¿lo ha configurado correctamente para usar esos campos? –

Respuesta

11

vale, está en la documentación, pero siento que no es lo suficientemente claro.

Lo que tienes que hacer es declarar de alguna manera los datos que se buscaron (pensé que era el punto de:

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

etc ...)

bien, lo suficientemente llorando.

Todo lo que tiene que hacer es

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

y luego hacer una plantilla, en mi caso:

búsqueda/índices/noticias/entry_text.txt

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

Beautiul, se trabajos.

Cuestiones relacionadas