Z
Z
zelsky2015-10-29 19:28:11
Django
zelsky, 2015-10-29 19:28:11

Simple search in Django?

Recommend a battery for searching inside a Django app by models.
Just not Sphinx because the docks of the norms are not ours. And ische better an example of implementation most. Thank you.

Answer the question

In order to leave comments, you need to log in

4 answer(s)
D
devel787, 2015-11-02
@zelsky

> And ische better an example of implementation most. Thank you.
https://youtu.be/vXl7EEURfO8

R
Roman Kitaev, 2015-10-29
@deliro

https://github.com/django-haystack/django-haystack

Z
zigen, 2015-10-29
@zigen

The easiest search:
julienphalip.com/post/2825034077/adding-search-to-...

import re
from django.db.models import Q

def normalize_query(query_string,
                    findterms=re.compile(r'"([^"]+)"|(\S+)').findall,
                    normspace=re.compile(r'\s{2,}').sub):
    return [normspace(' ', (t[0] or t[1]).strip()) for t in findterms(query_string)] 

def get_query(query_string, search_fields):
    query = None # Query to search for every search term        
    terms = normalize_query(query_string)
    for term in terms:
        or_query = None # Query to search for a given term in each field
        for field_name in search_fields:
            q = Q(**{"%s__icontains" % field_name: term})
            if or_query is None:
                or_query = q
            else:
                or_query = or_query | q
        if query is None:
            query = or_query
        else:
            query = query & or_query
    return query

def search(request):
    query_string = ''
    found_entries = None
    if ('q' in request.GET) and request.GET['q'].strip():
        query_string = request.GET['q']
        
        entry_query = get_query(query_string, ['title', 'body',])
        
        found_entries = Entry.objects.filter(entry_query).order_by('-pub_date')

    return render_to_response('search/search_results.html',
                          { 'query_string': query_string, 'found_entries': found_entries },
                          context_instance=RequestContext(request))

S
Stanislav Gordienko, 2015-11-05
@stagor

Maybe late, but I'll post my solution. I used Shpinx + Sphinxit library in my project. Full text search was implemented quickly and easily, and its functionality is amazing. If interested, I can give more information.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question