search_indexes.py 2.02 KB
# -*- coding: utf-8 -*-

from datetime import datetime
from django.db.models import Q
from haystack import indexes

from .models import Wiki


class WikiIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    wiki_text = indexes.CharField(model_attr='text')
    name = indexes.CharField(model_attr='name')
    author = indexes.CharField(model_attr='get_author', null=True)
    collaborators = indexes.CharField(
        model_attr='get_collaborators', null=True
    )
    comment = indexes.CharField(model_attr='comment', null=True)
    time = indexes.DateTimeField(model_attr='time', null=True)

    url = indexes.CharField()
    type = indexes.CharField()

    def get_model(self):
        return Wiki

    def prepare_time(self, obj):
        return datetime.fromtimestamp(self.prepared_data['time']/1000000)

    def prepare_type(self, obj):
        return u'wiki'

    def prepare_url(self, obj):
        return u'/wiki/{}'.format(obj.name)

    def index_queryset(self, using=None):
        wiki = self.get_model().objects.raw(
            '''
            SELECT "wiki"."name", MAX("wiki"."version") AS version
            FROM "wiki"
            GROUP BY "wiki"."name"
            '''
        )

        q = Q()
        for obj in wiki:
            q |= Q(name=obj.name, version=obj.version)

        return self.get_model().objects.filter(q)


# def TicketIndex(indexes.SearchIndex, indexes.Indexable):
#     text =  = indexes.CharField(document=True, use_template=True)
#     time = indexes.CharField(
#     changetime = indexes.CharField(
#     component = indexes.CharField(
#     severity = indexes.CharField(
#     priority = indexes.CharField(
#     owner = indexes.CharField(
#     reporter = indexes.CharField(
#     cc = indexes.CharField(
#     version = indexes.CharField(
#     milestone = indexes.CharField(
#     status = indexes.CharField(
#     resolution = indexes.CharField(
#     summary = indexes.CharField(
#     description = indexes.CharField(
#     keywords = indexes.CharField(