是否可以使用实时信号进行自动更新,使干草堆中的多个索引具有弹性

时间:2016-03-03 19:59:51

标签: python django elasticsearch django-haystack

我使用haystack在弹性中有多个索引我试图用RealtimeSignalProcessor自动更新索引。是干草堆支持吗?

这是我跟随的link。 同样适用于单一指数。

我怀疑设置中的Haystack_connection是错误的。请建议正确的语法。

我没有特别需要编写任何自定义SignalProcessors。有没有办法使用现成的Haystack Realtime - RealtimeSignalProcessor 我提到this 问题,但没有帮助。

HAYSTACK_CONNECTIONS = {
'default': {
    'ENGINE':        'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
    'URL': 'http://127.0.0.1:9200/',
    'INDEX_NAME': 'haystack',
    'INCLUDE_SPELLING': True,

},
'Hello':
{
    'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
    'URL': 'http://127.0.0.1:9200/',
    'INDEX_NAME': 'helloindex',
    'INCLUDE_SPELLING': True,
},
'Note':
{
    'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
    'URL': 'http://127.0.0.1:9200/',
    'INDEX_NAME': 'noteindex',
    'INCLUDE_SPELLING': True,
}, 
}

提前谢谢。

1 个答案:

答案 0 :(得分:1)

<强> Yes its possible

我能够通过使用Django-Haystack的路由器来解决这个问题

在settings.py中我做了这个

HAYSTACK_CONNECTIONS = {
'My_Testing':
{
    'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
    'URL': 'http://127.0.0.1:9200/',
    'INDEX_NAME': 'my_testing',
    'INCLUDE_SPELLING': True,
    'EXCLUDED_INDEXES': ['talks.search_indexes.NoteIndex'],

},
'Note':
{
    'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
    'URL': 'http://127.0.0.1:9200/',
    'INDEX_NAME': 'note',
    'INCLUDE_SPELLING': True,
    'EXCLUDED_INDEXES': ['talks.search_indexes.My_TestingIndex'],

},
'default': {
    'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
    'URL': 'http://127.0.0.1:9200/',
    'INDEX_NAME': 'haystack',
    # 'INCLUDE_SPELLING': True,

},
}

HAYSTACK_ROUTERS = ['talks.routers.My_TestingRouter',
                'talks.routers.NoteRouter']

HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

并且在与search_indexes.py处于同一级别的routers.py文件中添加此

    from haystack import routers


class My_TestingRouter(routers.BaseRouter):
    def for_write(self, **hints):
        return 'My_Testing'

    def for_read(self, **hints):
        return 'My_Testing'


class NoteRouter(routers.BaseRouter):
    def for_write(self, **hints):
        return 'Note'

    def for_read(self, **hints):
        return 'Note'

希望有一天能帮到某人。

和平。