Django-Haystack 中从 1.X 到 2.X 迁移 SearchSite

在 Django-Haystack 2.X 版本中,SearchSite 和 haystack.site 已被移除,handle_registrations 和 autodiscover 也已被移除,同时引入了多索引支持、SignalProcessors 并移除了 RealTimeSearchIndex。此外,一些设置也被移除或重命名。

解决方案

1. 迁移 SearchSite

  1. 首先,需要在 settings.py 中添加以下代码:
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.simple_backend.SimpleEngine',
    },
}
  1. 然后,需要在 models.py 中添加以下代码:
from haystack import indexes

class MyModelIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)

    def get_model(self):
        return MyModel
  1. 接下来,需要在 urls.py 中添加以下代码:
from haystack.utils import loading

loading.register(MyModel, MyModelIndex)

2. 迁移 autodiscover

  1. 在 settings.py 中添加以下代码:
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.simple_backend.SimpleEngine',
    },
}

HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
  1. 然后,需要在 urls.py 中添加以下代码:
from haystack.utils import loading

loading.register(MyModel, MyModelIndex)

3. 迁移 RealTimeSearchIndex

RealTimeSearchIndex 已在 Django-Haystack 2.X 中移除,因此需要使用 SignalProcessors 来实现实时索引。

  1. 在 settings.py 中添加以下代码:
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
  1. 然后,需要在 models.py 中添加以下代码:
from haystack import indexes

class MyModelIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)

    def get_model(self):
        return MyModel

    def save_object(self, instance):
        super(MyModelIndex, self).save_object(instance)
        self.update_object(instance, commit=False)

    def delete_object(self, instance):
        super(MyModelIndex, self).delete_object(instance)

4. 迁移各种设置

一些设置在 Django-Haystack 2.X 中被移除或重命名,需要根据实际情况进行迁移。

以下是常见的迁移设置:

旧设置新设置默认值
HAYSTACK_SITECONFHAYSTACK_CONNECTIONS{}
HAYSTACK_SEARCH_RESULTS_PER_PAGEHAYSTACK_DEFAULT_SEARCH_RESULTS_PER_PAGE10
HAYSTACK_ID_FIELDHAYSTACK_DEFAULT_ID_FIELD‘id’
HAYSTACK_DATETIME_FORMATHAYSTACK_DEFAULT_DATETIME_FORMAT‘%Y-%m-%dT%H:%M:%S.%fZ’
HAYSTACK_DEFAULT_OPERATORHAYSTACK_DEFAULT_OPERATOR‘OR’
HAYSTACK_ANALYZERHAYSTACK_DEFAULT_ANALYZER‘whoosh.analysis.StandardAnalyzer’
HAYSTACK_STOP_WORDSHAYSTACK_DEFAULT_STOP_WORDSset()
HAYSTACK_STEMMERHAYSTACK_DEFAULT_STEMMER‘whoosh.stemmers.PorterStemmer’
HAYSTACK_PREPROCESSORSHAYSTACK_DEFAULT_PREPROCESSORS[]
HAYSTACK_POSTPROCESSORSHAYSTACK_DEFAULT_POSTPROCESSORS[]
HAYSTACK_INCLUDE_SPELLINGHAYSTACK_DEFAULT_INCLUDE_SPELLINGFalse
HAYSTACK_LANGUAGE_DETECTIONHAYSTACK_DEFAULT_LANGUAGE_DETECTIONTrue
HAYSTACK_SEARCH_FAR_AWAYHAYSTACK_DEFAULT_SEARCH_FAR_AWAYFalse
HAYSTACK_MORPHOLOGYHAYSTACK_DEFAULT_MORPHOLOGYNone
HAYSTACK_DEFAULT_WILDCARDHAYSTACK_DEFAULT_DEFAULT_WILDCARD‘*’
HAYSTACK_FUZZY_WIGHTHAYSTACK_DEFAULT_FUZZY_WEIGHT1.0
HAYSTACK_DEFAULT_BOOSTHAYSTACK_DEFAULT_DEFAULT_BOOST1.0
HAYSTACK_OR_BOOSTHAYSTACK_DEFAULT_OR_BOOST1.0
HAYSTACK_AND_BOOSTHAYSTACK_DEFAULT_AND_BOOST1.0
HAYSTACK_PHRASE_BOOSTHAYSTACK_DEFAULT_PHRASE_BOOST1.0
HAYSTACK_SLOPHAYSTACK_DEFAULT_SLOP0
HAYSTACK_DISTANCE_MEASUREHAYSTACK_DEFAULT_DISTANCE_MEASURE‘whoosh.scoring.BM25F’
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值