gpt4 book ai didi

django - 多语言 django 网站上的搜索功能

转载 作者:行者123 更新时间:2023-12-03 10:43:26 24 4
gpt4 key购买 nike

我正在构建一个多语言 Django 站点,我正在使用 django-transmeta用于我的模型数据翻译。现在我想知道是否有适用于多语言模型的 Django 搜索应用程序。我玩过Haystack它适用于单语言网站,但我无法让它与 transmeta 的元类一起使用......

有没有人有这方面的经验?任何指针将不胜感激!

干杯,

马丁

最佳答案

这更像是一个起点,而不是一个完整的解决方案,但我希望它对其他用户有所帮助
可以改进这个想法并达到更好的解决方案。

使用 Haystack 索引多语言站点(使用 django-transmeta 或 django-multilingual)您面临两个问题:

  • 如何索引所有的内容
    语言
  • 如何搜索查询
    正确的索引取决于
    所选语言

  • 1) 索引所有语言的内容

    使用公共(public)前缀为每个 SearchIndex 模型中的每种语言创建单独的字段
    和语言代码:
    text_en = indexes.CharField(model_attr='body_en', document=True)
    text_pt = indexes.CharField(model_attr='body_pt')

    如果要索引多个字段,显然可以使用模板。只有一个索引可以有 document=True。

    如果需要预渲染 http://haystacksearch.org/docs/searchindex_api.html字段为
    更快的显示,您应该为每种语言创建一个(即,render_en,rendered_pt)

    2)查询正确的索引

    默认的 haystack auto_query 方法被编程为在请求中接收“q”查询参数
    并在所有索引模型中搜索“内容”索引字段 - 标记为 document=True 的字段。
    只有一个索引可以有 document=True ,我相信我们只能有一个 SearchIndex
    对于每个 Django 模型。

    使用通用搜索表单的最简单解决方案是创建多语言 SearchQuerySet
    该过滤器不是基于内容,而是基于 text_ (文本是使用的前缀
    上面的 Searchindex 模型)
    from django.conf import settings
    from django.utils.translation import get_language
    from haystack.query import SearchQuerySet, DEFAULT_OPERATOR

    class MlSearchQuerySet(SearchQuerySet):
    def filter(self, **kwargs):
    """Narrows the search based on certain attributes and the default operator."""
    if 'content' in kwargs:
    kwd = kwargs.pop('content')
    kwdkey = "text_%s" % str(get_language())
    kwargs[kwdkey] = kwd
    if getattr(settings, 'HAYSTACK_DEFAULT_OPERATOR', DEFAULT_OPERATOR) == 'OR':
    return self.filter_or(**kwargs)
    else:
    return self.filter_and(**kwargs)

    并将您的搜索 URL 指向使用此查询集的 View :
    from haystack.forms import ModelSearchForm
    from haystack.views import SearchView

    urlpatterns += patterns('haystack.views',
    url(r'^search/$', SearchView(
    searchqueryset=MlSearchQuerySet(),
    form_class=ModelSearchForm
    ), name='haystack_search_ml'),
    )

    现在您的搜索应该知道选择的语言。

    关于django - 多语言 django 网站上的搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1531447/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com