Django-haystack: Neue Backends - kombinierte Diskussion

Erstellt am 10. Juli 2016  ·  8Kommentare  ·  Quelle: django-haystack/django-haystack

Es gab viele Vorschläge für neue Backends zu verschiedenen Themen. Ich werde diese Probleme schließen und versuchen, sie alle hier an einem Ort zu referenzieren. Es scheint, als hätte @acdha einige konkrete Gedanken zum besten Ansatz für sie.

AWS ElasticSearch:

1303 #1314

all decision needed feature

Hilfreichster Kommentar

In Bezug auf die Verbindung mit AWS ES konnte ich dies ohne Unterklassen mithilfe von reviews-aws4auth tun .
Es beinhaltet ein wenig Code in settings.py , aber nicht zu viel.

ELASTICSEARCH_URL = 'https://asdfasdfasdffakefake.us-east-1.es.amazonaws.com/'
USE_AWS_ELASTICSEARCH = 'es.amazonaws.com' in ELASTICSEARCH_URL
elasticsearch_kwargs = {}

if USE_AWS_ELASTICSEARCH:
    import elasticsearch
    from requests_aws4auth import AWS4Auth

    awsauth = AWS4Auth(AWS_ES_ACCESS_KEY_ID, AWS_ES_SECRET_ACCESS_KEY, AWS_REGION, 'es')
    elasticsearch_kwargs.update(
        http_auth=awsauth,
        connection_class=elasticsearch.RequestsHttpConnection,
    )

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch2_backend.Elasticsearch2SearchEngine',
        'URL': ELASTICSEARCH_URL,
        'INDEX_NAME': 'haystack',
        'KWARGS': elasticsearch_kwargs
    },
}

Alle 8 Kommentare

http://django-haystack.readthedocs.io/en/v2.5.0/backend_support.html#unsupported -backends-alternatives hat meinen ersten Entwurf, der meine Position zu neuen Backends zusammenfasst, nämlich dass wir realistisch gesehen nicht genug Freiwillige haben Zeit, um irgendetwas anderes zu unterstützen, würde aber gerne Projekte unter der Django-haystack-Organisation für jeden erstellen, der an einem arbeiten möchte.

Bei Änderungen an bestehenden Backends (z. B. AWS ElasticSearch-Unterstützung) sollten wir sehen, wie viele Änderungen am vorhandenen Code erforderlich sind und wie schwierig es wäre, ihn zu testen.

Sollten neue Backends im Kerncode enthalten sein?
Könnte es sich um optionale zusätzliche Bibliotheken handeln, die Benutzer nach Bedarf installieren?

NB. Ich bin sehr dafür, ein AWS-Backend zu haben, kann aber aus freiwilliger Sicht verstehen, dass es schwierig ist.

@LegoStormtroopr In der Vergangenheit gab es meiner Meinung nach eine Tendenz, sie in den Kern aufzunehmen, sowohl weil Django dies für Datenbanken tut als auch weil Python-Paketverwaltung und Quellcode-Hosting früher schwieriger waren (denken Sie daran, dass Haystack auf etwa 2007 zurückgeht). Das Django-Kernprojekt hat viel mehr Mitwirkende und unterstützende Infrastruktur, die wir nicht haben, und da das Paketieren von Python so viel einfacher ist als früher, halte ich es für sinnvoll, jedes einzelne als separates Projekt zu erstellen, das installiert werden kann unabhängig und kann alle optionalen Bibliotheken automatisch einbinden (z. B. wenn Sie django-haystack installieren, möchten wir keine Unterstützungsbibliotheken für die Backends einbinden, die Sie nicht benötigen, sondern einen spezifischeren Paketnamen wie xapian-haystack , django-haystack-solrcloud , django-haystack-aws-elasticsearch usw. könnten sicher von allen notwendigen Bibliotheken abhängen).

Der Hauptvorteil davon ist, dass es die Entwicklungs-, Test- und Release-Zyklen vereinfacht – wenn Sie z. B. dieses django-haystack-aws-elasticsearch -Paket erstellen wollten, könnten Sie jederzeit Updates liefern, wenn sich die ES-Bibliotheken ändern, ohne sich mit dem Testen von Solr, Whoosh usw. befassen zu müssen .

Ich habe diesem Design eindeutig zugestimmt. Es wird eine gute API benötigt, um das Backend einzubinden

Grüße! Ich bin der Schöpfer der neuesten Elasticsearch-PRs Nr. 1460 und Nr. 1461 und habe ein separates Paket herausgebracht, das alle Versionen enthält – plus einige dringend benötigte Refactoring-Jobs und die Lösung der verbleibenden ES5.x-Fehler.

https://github.com/CraveFood/django-haystack-elasticsearch

Verfügbar als django-haystack-elasticsearch auf PyPI.
Jede Hilfe bei der Überprüfung des Codes, beim Auffinden von Fehlern oder neuen Funktionen wäre sehr willkommen.

In Bezug auf die Verbindung mit AWS ES konnte ich dies ohne Unterklassen mithilfe von reviews-aws4auth tun .
Es beinhaltet ein wenig Code in settings.py , aber nicht zu viel.

ELASTICSEARCH_URL = 'https://asdfasdfasdffakefake.us-east-1.es.amazonaws.com/'
USE_AWS_ELASTICSEARCH = 'es.amazonaws.com' in ELASTICSEARCH_URL
elasticsearch_kwargs = {}

if USE_AWS_ELASTICSEARCH:
    import elasticsearch
    from requests_aws4auth import AWS4Auth

    awsauth = AWS4Auth(AWS_ES_ACCESS_KEY_ID, AWS_ES_SECRET_ACCESS_KEY, AWS_REGION, 'es')
    elasticsearch_kwargs.update(
        http_auth=awsauth,
        connection_class=elasticsearch.RequestsHttpConnection,
    )

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch2_backend.Elasticsearch2SearchEngine',
        'URL': ELASTICSEARCH_URL,
        'INDEX_NAME': 'haystack',
        'KWARGS': elasticsearch_kwargs
    },
}

Angesichts der Popularität von AWS scheint dies etwas zu sein, das wir vielleicht in der Dokumentation haben möchten, oder, wenn Sie Zeit für eine Pull-Anfrage haben, vielleicht etwas, das automatisch von der URL getrennt werden könnte.

Ich würde das gerne ausprobieren – eine Sache, die das obige Snippet nicht anspricht, sind automatisierte IAM-Rollen. Wenn sich die Zugangsdaten ändern, wird die Klasse mit den ursprünglichen Zugangsdaten instanziiert, aber nach etwa 30 Sekunden hat sie keine Berechtigung mehr, auf die ES-Instanz zuzugreifen.

Hier ist eine Zusammenfassung, die zeigt, was wir tun:
https://gist.github.com/LegoStormtroopr/4a9a2110eb03c661894529b508d83845

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen