[Fixed]-Is it possible to have multiple index in haystack elastic using real-time signal for auto-update

1👍

Yes its possible

I was able to solve this issue by using Django-Haystack’s routers

In settings.py i did this

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'

and in routers.py file which is at same level as search_indexes.py add this

    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'

Hope this helps somebody someday.

peace.

Leave a comment