2010-10-01 14 views
8

Przeczytałem dokumentację wprowadzającą i kilka innych przykładów w Internecie. I to moja search_indexes.py wygląda następująco:Brak wyników wyszukiwania 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) 

Ale kiedy szukać, dostaję żadnych wyników. O dziwo, jeśli użyję frazy wyszukiwania "a" lub jakiejkolwiek innej pojedynczej litery, otrzymam to, co wygląda jak każdy wpis w tym przeklętym miejscu.

W każdym razie ... Wygląda na to, że wyszukiwarka nie patrzy na żadne z pól. :/

Wszystko poniżej tej linii jest mniej istotne (to działa, zaufaj mi):


Moim zdaniem:

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) 

I 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

Jakiej wyszukiwarki używasz? Jeśli na przykład jest Solr, czy skonfigurowałeś go poprawnie, aby korzystać z tych pól? –

Odpowiedz

11

OK, jest w dokumentacji, ale czuję, że nie jest wystarczająco jasne.

Co trzeba zrobić, to zadeklarować jakoś dane mają być przeszukiwane (myślałem, że to cały punkt:

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

etc ...)

ok, tyle płacze.

Wszystko co musisz zrobić, to

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

a następnie wykonać szablon, w moim przypadku:

search/indeksy/news/entry_text.txt

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

beautiul, to Prace.

Powiązane problemy