Python django cmsplugin博客搜索索引,用于使用whoose搜索haystack

Python django cmsplugin博客搜索索引,用于使用whoose搜索haystack,python,django,search,django-haystack,django-cms,Python,Django,Search,Django Haystack,Django Cms,我想添加一个搜索功能为一个简单的django cms主页与cmsplugin博客 但只有搜索索引可用于django cms facetsearch。但是FaceSearch需要solr,我不想只为几个cms页面和博客条目运行solr服务器。我只想使用带有嗖嗖声的haystack,因为它的配置非常简单 是否有cmsplugin博客模型的多语言搜索索引?还是我必须自己写 感谢您的帮助……我在使用haystack、django cms、cmsplugin blog和其他一些应用程序进行设置时遇到了同样

我想添加一个搜索功能为一个简单的django cms主页与cmsplugin博客

但只有搜索索引可用于django cms facetsearch。但是FaceSearch需要solr,我不想只为几个cms页面和博客条目运行solr服务器。我只想使用带有嗖嗖声的haystack,因为它的配置非常简单

是否有cmsplugin博客模型的多语言搜索索引?还是我必须自己写


感谢您的帮助……

我在使用haystack、django cms、cmsplugin blog和其他一些应用程序进行设置时遇到了同样的问题

我刚刚为cmsplugin博客和haystack创建了一个自定义搜索索引,灵感来自django CMS搜索中用于常规CMS页面的索引。看看它,它可能会帮助你创建自己的

from haystack import indexes
from haystack import site
from cmsplugin_blog.models import Entry, EntryTitle
from cms.models.pluginmodel import CMSPlugin
from django.utils.encoding import force_unicode
import re

def _strip_tags(value):
    """
    Returns the given HTML with all tags stripped.

    This is a copy of django.utils.html.strip_tags, except that it adds some
    whitespace in between replaced tags to make sure words are not erroneously
    concatenated.
    """
    return re.sub(r'<[^>]*?>', ' ', force_unicode(value))

class BlogIndex(indexes.SearchIndex):
    text = indexes.CharField(document=True)
    url = indexes.CharField(stored=True, indexed=False, model_attr='get_absolute_url')
    title = indexes.CharField(stored=True, indexed=False)
    pub_date = indexes.DateTimeField(model_attr='pub_date', null=True)

    def get_model(self):
        return Entry

    def index_queryset(self):
        """Used when the entire index for model is updated."""
        return self.get_model().objects.filter(is_published=True)

    def prepare_title(self, obj):
        return EntryTitle.objects.filter(entry=obj)[0]

    def prepare_text(self, obj):
        title = EntryTitle.objects.filter(entry=obj)[0]
        placeholder_plugins = CMSPlugin.objects.filter(placeholder__in=obj.placeholders.all())
        text = force_unicode(title)
        plugins = list(placeholder_plugins)
        for base_plugin in plugins:
            instance, plugin_type = base_plugin.get_plugin_instance()
            if instance is None:
                # this is an empty plugin
                continue
            if hasattr(instance, 'search_fields'):
                text += u' '.join(force_unicode(_strip_tags(getattr(instance, field, ''))) for field in instance.search_fields)
            if getattr(instance, 'search_fulltext', False) or getattr(plugin_type, 'search_fulltext', False):
                text += _strip_tags(instance.render_plugin(context=RequestContext(request))) + u' '
        return text

site.register(Entry, BlogIndex)
来自haystack导入索引的

从haystack导入站点
从cmsplugin_blog.models导入条目,EntryTitle
从cms.models.pluginmodel导入CMSPlugin
从django.utils.encoding导入强制\u unicode
进口稀土
def带标签(值):
"""
返回给定的HTML,去掉所有标记。
这是django.utils.html.strip_标记的副本,只是添加了一些
替换标记之间的空格,以确保单词没有错误
连接。
"""
返回re.sub(r']*?>','',force_unicode(值))
类BlogIndex(index.SearchIndex):
text=index.CharField(document=True)
url=index.CharField(存储=True,索引=False,model\u attr='get\u absolute\u url')
title=index.CharField(存储=True,索引=False)
发布日期=索引.DateTimeField(model\u attr='pub\u date',null=True)
def get_型号(自):
返回条目
def索引查询集(自身):
“”“更新模型的整个索引时使用。”“”
返回self.get_model().objects.filter(is_published=True)
def准备_标题(自身、obj):
return EntryTitle.objects.filter(entry=obj)[0]
def准备_文本(自身、obj):
title=EntryTitle.objects.filter(entry=obj)[0]
placeholder\u plugins=CMSPlugin.objects.filter(placeholder\u in=obj.placeholders.all())
text=force_unicode(标题)
插件=列表(占位符\插件)
对于基本插件插件:
实例,plugin\u type=base\u plugin.get\u plugin\u instance()
如果实例为“无”:
#这是一个空插件
持续
如果hasattr(实例“搜索字段”):
text+=u“”。为实例中的字段加入(强制unicode(_strip_标记(getattr(实例,字段“”)))。搜索_字段)
如果getattr(实例'search\u fulltext',False)或getattr(插件类型'search\u fulltext',False):
text+=\u strip\u标记(instance.render\u插件(context=RequestContext(request)))+u“”
返回文本
site.register(条目、博客索引)

我会考虑把CMPSPLUGIN博客的一个备份版本与GITHUB上的搜索索引相结合。只要有帮助,请随意使用它