Django-haystack: ElasticSearch 2.0-Unterstützung hinzufügen

Erstellt am 25. Sept. 2015  ·  38Kommentare  ·  Quelle: django-haystack/django-haystack

Elastic Search 2.0 befindet sich in der Beta-Phase und verwendet Apache Lucene. Und sollte in einer zukünftigen Version von haystack hinzugefügt werden

Hilfreichster Kommentar

Ich habe an einem neuen Backend für die ES 2.x-Unterstützung gearbeitet.
Hauptsächlich habe ich den ES 1.x-Code und die Tests geklont und daran gearbeitet.
Die Änderungen sind:

  • Facetten (Aggregationen auf ES 2.x)
  • delete_by_query (Scroll-API und Massenaktionen auf ES 2.x)
  • "mehr so" (Mehr wie diese Abfrage)

Die Filiale besteht Prüfungen. Aber ich bin mir nicht sicher, ob es für "Pull Request" bereit ist (Neuling hier)
https://github.com/PedroAquilino/django-haystack/tree/es2

Alle 38 Kommentare

Auch Facettierung nicht mit ES 2.0, es wirft eine Ausnahme auf der ES-Seite:

SearchParseException[failed to parse search source. unknown search element [facets]]

Demnach wurden https://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets-filter-facet.html Facetten entfernt.

Ist jemand in diesem Ticket daran interessiert, bei der Arbeit an einer Pull-Anfrage für den ES2-Support zu helfen? Ich benutze ElasticSearch nicht viel und das Hauptprojekt, mit dem ich es verwende, wurde noch nicht auf 2.0 aktualisiert, sodass meine Zeit, daran zu arbeiten, begrenzt ist.

@acdha Ich interessiere mich für eine Anleitung?

@auvipy Danke! Im Allgemeinen würde ich empfehlen, mit der Arbeit in einem Branch für den eventuellen Pull-Request zu beginnen. Wenn Sie https://github.com/django-haystack/django-haystack/blob/master/CONTRIBUTING.md noch nicht gelesen haben, ist das wahrscheinlich keine schlechte Idee, aber es sollte nichts Überraschendes darin enthalten. Die Hauptsache, die wir herausfinden müssen, ist, wie dies für die Abwärtskompatibilität aussehen wird – zB wird es schwierig sein, sowohl ES1 als auch ES2 in derselben Codebasis zu unterstützen.

Ich denke, es ist besser, zwei separate Back-Ends zu haben: eines für die elastische Suche 1.x und ein weiteres für 2.x.

Ja, das neue Backend sollte ein separates sein

Das erleichtert sicherlich die Wartung

Hinweis für alle, die „+1“-Kommentare hinterlassen: Bitte verwenden Sie den Abonnieren-Button auf der rechten Seite, wenn Sie nicht gerade am ES2-Backend arbeiten.

Arbeitet jemand daran? Ich kann es versuchen, wenn ich Zeit finde @work

Entschuldigung, ich konnte nicht

Hallo chocobn69,

Ich habe einige Ideen, was wir für die Unterstützung von es 2.x in haystack hinzufügen könnten. Ich habe dafür meinen Heuhaufen mit Monkey-Patches gepatcht, aber mein Code ist wirklich spezifisch für mein Projekt, daher kann er derzeit nicht gezeigt werden.

Über die Einstellungen:

  • Entfernen Sie den an die es-Engine gesendeten _boost-Parameter: nicht mehr unterstützt, stürzt die Indexerstellung / das Upgrade ab
  • Fügen Sie Unterstützung für Mapper-Anhänge als Felder hinzu (ich habe eine gute Codebasis dazu, ich verstehe jetzt fast, wie es funktioniert ... es Docs sind diesbezüglich sehr verschwommen.)
    außer diesen scheint die es-Engine bei mir gut zu funktionieren.

Wenn Sie dafür einen Branch erstellen, teile ich gerne meinen Code dazu, aber ich kann nicht der Leiter für dieses Projekt sein (nicht viel Zeit zu geben)

Die offizielle Unterstützung von ES 2.x in haystack wird eine gute Nachricht sein !

Ich kann bestätigen, dass der Parameter _boost entfernt werden sollte. Ich habe das gleiche Problem mit dem Ausführen von Haystack auf Elasticsearch 2.x erlebt. Mit _boost würde der Parameterindex zerquetschen. Ohne sie würde es nur bauen, obwohl mehr oder weniger komplexe Abfragen, wie das Sortieren nach Entfernung, fehlschlagen würden.

In Ordnung
Ich habe schon einen Ast auf meiner Gabel gemacht (noch nicht geschoben)
Zuerst konzentriere ich mich auf das Bestehen von es1-Tests (ohne Facetten und _boost)

Mein Code: WTFPL-Lizenz..

https://gist.github.com/frague59/8ab2470ed133754a6327

Ich lasse Sie es studieren und nehmen, was Sie wollen.

Ich habe an einem neuen Backend für die ES 2.x-Unterstützung gearbeitet.
Hauptsächlich habe ich den ES 1.x-Code und die Tests geklont und daran gearbeitet.
Die Änderungen sind:

  • Facetten (Aggregationen auf ES 2.x)
  • delete_by_query (Scroll-API und Massenaktionen auf ES 2.x)
  • "mehr so" (Mehr wie diese Abfrage)

Die Filiale besteht Prüfungen. Aber ich bin mir nicht sicher, ob es für "Pull Request" bereit ist (Neuling hier)
https://github.com/PedroAquilino/django-haystack/tree/es2

gut gemacht ! Ich habe genauso angefangen, aber keine Zeit gefunden, um zu beenden

hoffe es wird bald zusammengeführt

Nur eine kurze Erinnerung: Das Hinzufügen eines 👍 bewirkt nichts anderes, als jedem eine weitere E-Mail zum Löschen zu geben. Haystack ist ein freiwilliges Projekt und wenn Sie ElasticSearch verwenden, können Sie diese Funktion am besten nutzen, indem Sie den Code in https://github.com/django-haystack/django-haystack/issues/1336 überprüfen und testen und melden deine Ergebnisse dort.

Hallo zusammen,
Ich möchte den Thread nicht mit Schrott überladen. Aber ich verwende Hasystack und Elastic für die Website www.alfa.com . Wir versuchen im Moment auf ES.2.2 umzusteigen und sehen die gleichen Fehler wie ihr.

Würde gerne helfen und beitragen. Wer führt? Und bei welchen Aufgaben können/sollten wir helfen?

Liebe Grüße, Nikolaus.

@nherriot Danke für das Angebot – ich würde mir den Code in #1336 ansehen. Meine Hauptprojekte verwenden alle Solr, daher ist meine Zeit, daran zu arbeiten, begrenzt. @PedroAquilino hat die meiste Arbeit geleistet.

Ich habe ES1.7 verwendet und auf 2.3.3 aktualisiert, bekomme jetzt den gleichen Fehler. Ich freue mich, die Codes zu sehen und zu testen.

Danke
Dilshad

Ich habe keine Probleme mehr mit der ES2-Kompatibilität, seit ich https://github.com/Terr/django-haystack/commits/es2-integration-branch verwende .

Verwendet es derzeit basierend auf seinem neuesten Commit ( 3d5f03ab676c132cdc59d01e9eaec4a857d169af ) in der Produktion.

Ich habe jetzt das gleiche Problem, ich arbeite mit django-oscar und elasticsearch 2.3.5 und habe diesen Fehler:

Failed to query Elasticsearch using '(category:(Rose AND designs AND > AND Hijabs) OR category:(Rose AND designs AND > AND Hijabs AND > AND Bonetes AND & AND Tocados) OR category:(Rose AND designs AND > AND Hijabs AND > AND Bufandas) OR category:(Rose AND designs AND > AND Hijabs AND > AND Turbantes) OR category:(Rose AND designs AND > AND Hijabs AND > AND Chal) OR category:(Rose AND designs AND > AND Hijabs AND > AND Cubrecuellos AND & AND Cubrebrazos) OR category:(Rose AND designs AND > AND Superior) OR category:(Rose AND designs AND > AND Superior AND > AND Túnicas) OR category:(Rose AND designs AND > AND Vestidos) OR category:(Rose AND designs AND > AND Vestidos AND > AND Vestidos) OR category:(Rose AND designs AND > AND Vestidos AND Talla AND Grande) OR category:(Rose AND designs AND > AND Vestidos AND Talla AND Grande AND > AND Vestidos AND Talla AND Grande) OR category:(Rose AND designs AND > AND Inferiores) OR category:(Rose AND designs AND > AND Inferiores AND > AND Faldas) OR category:(Rose AND designs AND > AND Ropa AND de AND Calle) OR category:(Rose AND designs AND > AND Ropa AND de AND Calle AND > AND Abayas) OR category:(Rose AND designs AND > AND Ropa AND de AND Calle AND > AND Sobretodos AND & AND abrigos) OR category:(Rose AND designs AND > AND Ropa AND de AND Calle AND > AND Chaquetas) OR category:(Rose AND designs AND > AND Deportivos) OR category:(Rose AND designs AND > AND Deportivos AND > AND Vestidos AND de AND baño AND de AND cuerpo AND completo) OR category:(Rose AND designs AND > AND Deportivos AND > AND Vestidos AND de AND baño AND semi AND descubiertos) OR category:(Rose AND designs AND > AND Deportivos AND > AND Chándales) OR category:(Rose AND designs AND > AND Vestidos AND de AND Noche) OR category:(Rose AND designs AND > AND Vestidos AND de AND Noche AND > AND Vestidos AND de AND Noche AND Musulmanes) OR category:(Rose AND designs AND > AND Vestidos AND de AND Noche AND > AND Trajes AND de AND Noche) OR category:(Rose AND designs AND > AND Vestidos AND de AND Noche AND > AND Pijamas) OR category:(Rose AND designs))': TransportError(400, 'search_phase_execution_exception', 'failed to parse search source. unknown search element [facets]')
Traceback (most recent call last):
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/haystack/backends/elasticsearch_backend.py", line 524, in search
    _source=True)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/client/utils.py", line 69, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/client/__init__.py", line 548, in search
    doc_type, '_search'), params=params, body=body)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/transport.py", line 329, in perform_request
    status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/connection/http_urllib3.py", line 109, in perform_request
    self._raise_error(response.status, raw_data)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/connection/base.py", line 108, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
elasticsearch.exceptions.RequestError: TransportError(400, 'search_phase_execution_exception', 'failed to parse search source. unknown search element [facets]')
Failed to query Elasticsearch using '(category:(Rose AND designs AND > AND Hijabs) OR category:(Rose AND designs AND > AND Hijabs AND > AND Bonetes AND & AND Tocados) OR category:(Rose AND designs AND > AND Hijabs AND > AND Bufandas) OR category:(Rose AND designs AND > AND Hijabs AND > AND Turbantes) OR category:(Rose AND designs AND > AND Hijabs AND > AND Chal) OR category:(Rose AND designs AND > AND Hijabs AND > AND Cubrecuellos AND & AND Cubrebrazos) OR category:(Rose AND designs AND > AND Superior) OR category:(Rose AND designs AND > AND Superior AND > AND Túnicas) OR category:(Rose AND designs AND > AND Vestidos) OR category:(Rose AND designs AND > AND Vestidos AND > AND Vestidos) OR category:(Rose AND designs AND > AND Vestidos AND Talla AND Grande) OR category:(Rose AND designs AND > AND Vestidos AND Talla AND Grande AND > AND Vestidos AND Talla AND Grande) OR category:(Rose AND designs AND > AND Inferiores) OR category:(Rose AND designs AND > AND Inferiores AND > AND Faldas) OR category:(Rose AND designs AND > AND Ropa AND de AND Calle) OR category:(Rose AND designs AND > AND Ropa AND de AND Calle AND > AND Abayas) OR category:(Rose AND designs AND > AND Ropa AND de AND Calle AND > AND Sobretodos AND & AND abrigos) OR category:(Rose AND designs AND > AND Ropa AND de AND Calle AND > AND Chaquetas) OR category:(Rose AND designs AND > AND Deportivos) OR category:(Rose AND designs AND > AND Deportivos AND > AND Vestidos AND de AND baño AND de AND cuerpo AND completo) OR category:(Rose AND designs AND > AND Deportivos AND > AND Vestidos AND de AND baño AND semi AND descubiertos) OR category:(Rose AND designs AND > AND Deportivos AND > AND Chándales) OR category:(Rose AND designs AND > AND Vestidos AND de AND Noche) OR category:(Rose AND designs AND > AND Vestidos AND de AND Noche AND > AND Vestidos AND de AND Noche AND Musulmanes) OR category:(Rose AND designs AND > AND Vestidos AND de AND Noche AND > AND Trajes AND de AND Noche) OR category:(Rose AND designs AND > AND Vestidos AND de AND Noche AND > AND Pijamas) OR category:(Rose AND designs))': TransportError(400, 'search_phase_execution_exception', 'failed to parse search source. unknown search element [facets]')
Traceback (most recent call last):
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/haystack/backends/elasticsearch_backend.py", line 524, in search
    _source=True)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/client/utils.py", line 69, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/client/__init__.py", line 548, in search
    doc_type, '_search'), params=params, body=body)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/transport.py", line 329, in perform_request
    status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/connection/http_urllib3.py", line 109, in perform_request
    self._raise_error(response.status, raw_data)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/connection/base.py", line 108, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
elasticsearch.exceptions.RequestError: TransportError(400, 'search_phase_execution_exception', 'failed to parse search source. unknown search element [facets]')

@Mibou Ich werde versuchen, deine Version zu verwenden. Ok, ich habe deine Version ausprobiert: Ich habe sie mit pip install -U git+https://github.com/Terr/django-haystack.git@es2-integration-branch installiert. Ich starte den Server neu und habe das gleiche Problem noch.

Failed to query Elasticsearch using '*:*': TransportError(400, 'search_phase_execution_exception', 'failed to parse search source. unknown search element [facets]')
Traceback (most recent call last):
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/haystack/backends/elasticsearch_backend.py", line 521, in search
    _source=True)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/client/utils.py", line 69, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/client/__init__.py", line 548, in search
    doc_type, '_search'), params=params, body=body)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/transport.py", line 329, in perform_request
    status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/connection/http_urllib3.py", line 109, in perform_request
    self._raise_error(response.status, raw_data)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/connection/base.py", line 108, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
elasticsearch.exceptions.RequestError: TransportError(400, 'search_phase_execution_exception', 'failed to parse search source. unknown search element [facets]')
Failed to query Elasticsearch using '*:*': TransportError(400, 'search_phase_execution_exception', 'failed to parse search source. unknown search element [facets]')
Traceback (most recent call last):
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/haystack/backends/elasticsearch_backend.py", line 521, in search
    _source=True)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/client/utils.py", line 69, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/client/__init__.py", line 548, in search
    doc_type, '_search'), params=params, body=body)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/transport.py", line 329, in perform_request
    status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/connection/http_urllib3.py", line 109, in perform_request
    self._raise_error(response.status, raw_data)
  File "/home/salahaddin/Proyectos/demo-oscar/lib/python3.5/site-packages/elasticsearch/connection/base.py", line 108, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
elasticsearch.exceptions.RequestError: TransportError(400, 'search_phase_execution_exception', 'failed to parse search source. unknown search element [facets]')

@PedroAquilino , dasselbe mit Ihrem Zweig: pip install -U git+https://github.com/PedroAquilino/django-haystack.git@es2 .

Gibt es etwas Neues für diese Funktion?

Eigentlich @SalahAdDin , alles scheint seit https://github.com/django-haystack/django-haystack/releases/tag/v2.5.0 im Kofferraum behoben zu sein

Aber ich habe die neueste django-haystack Version: 2.5.0 , und es funktioniert nicht!

Gleiches Problem wie bei @SalahAdDin während der Einrichtung von Facetten aus den Dokumenten https://django-haystack.readthedocs.io/en/v2.5.0/faceting.html/ Auch versucht https://github.com/joaojunior/django-haystack/tree/ es2_refactoring

Kann jemand den richtigen django-haystack zeigen, der mit Django 1.8.12, ES 2.4.1 funktioniert?

@BitcoinKing Siehe https://django-haystack.readthedocs.io/en/latest/installing_search_engines.html#elasticsearch. Wir suchen noch Freiwillige, die an ElasticSearch 2 arbeiten möchten. #1391 wäre ein guter Anfang.

@acdha Ich habe es bereits installiert und funktioniert. Ich konnte Elastic 1.7.3 mit Haystack 2.5.0 einrichten - mit Facetten. Die Dokumentation ist also veraltet

@BitcoinKing Ihr vorheriger Kommentar besagte, dass Sie ElasticSearch 2.x verwenden, das korrekt als nicht unterstützt dokumentiert ist. 1.7 wird unterstützt.

@acdha Entschuldigung, jetzt sehe ich diesen Satz "ElasticSearch 2.x wird noch nicht unterstützt, wenn Sie helfen lesen Sie bitte #1247." das wird auf diesen Thread verwiesen). Also weiter mit 1.7.3

Aber wird haystack bald Elastic 2.xx unterstützen?

Für Interessierte habe ich die aktuelle Elasticsearch Engine auf 2.X portiert. Mit 5.x habe ich es noch nicht hinbekommen.

Sie finden es hier: https://pypi.python.org/pypi/elasticsearch2-haystack

Es sollte für alle Versionen bis 2.4 funktionieren, aber es ist nicht perfekt, da es 2.x im Wesentlichen so patcht, dass es wie 1.x aussieht.

Von dem, was ich gehört habe, arbeitet jemand an einem neueren Backend, das hoffentlich für die neuesten Versionen von ES optimiert ist, was für mich nicht der Fall ist. Ich werde also keine PR machen - ich stelle sie nur zur Verfügung, bis es einen besseren Ersatz gibt.

Wir haben es bei unserer Arbeit an Django-Oscar getestet und es funktioniert im Moment einwandfrei.

Sehr schwer!

@SalahAdDin was ist schwer?

@NDevox macht 5.xx-Integration.

@acdha lohnt es sich, bis zur Veröffentlichung geöffnet zu bleiben?

@NDevox Das wollte ich morgen machen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen