Während die mapping
und to_indexed_json
Methoden verwandt sind, dienen sie tatsächlich zwei verschiedenen Zwecken.
Der Zweck der mapping
Methode ist Mapping für die Dokumenteigenschaften in einem Index zu definieren. Vielleicht möchten Sie eine bestimmte Eigenschaft als "not_analyzed" definieren, so dass sie nicht in Token aufgeteilt wird, oder setzen Sie einen spezifischen Analysator für die Eigenschaft oder (wie Sie erwähnen) Indexierungszeit Boost Faktor. Sie können auch Mehrfelder Eigenschaft, benutzerdefinierte Formate für Datum Typen usw.
Dieses Mapping wird dann verwendet, zB definieren. wenn Reifen automatisch creates an index for your model.
Der Zweck der to_indexed_json
Methode ist, eine JSON Serialisierung für Ihre Dokumente/Modelle zu definieren.
Die default to_indexed_json
method ist Ihre Mapping-Definition verwenden, werden nur Objekte im Mapping definiert verwenden - auf der Grundlage, dass, wenn Sie sich interessieren genug, um die Mapping, standardmäßig Reifen Indizes nur Eigenschaften mit definierten Mapping zu definieren.
Nun, wenn Sie einen festen Griff auf möchten, wie Ihr Modell ist in der Tat in JSON serialisiert für Elasticsearch, die Sie gerade Ihre eigene to_indexed_json
Methoden definieren (wie die README anweist).
Dieser Brauch MyModel#to_indexed_method
schert in die Regel nicht über Mapping Definition und baut die JSON-Serialisierung von Grunde auf neu (von Active der Nutzung to_json
, einen JSON-Builder verwenden wie jbuilder, oder einfach nur einen guten alten Hash Aufbau und Hash#to_json
Aufruf).
Also, den letzten Teil Ihrer Frage zu beantworten, wird nicht schaffen sowohl mapping
und to_indexed_json
mit absolut keine Konflikte, und in der Tat erforderlich, erweiterte Funktionen in Elasticsearch zu verwenden.
Fazit:
- Sie verwenden die
mapping
Methode, um die Zuordnung für Ihre Modelle für die Suchmaschine definieren
- Sie eine benutzerdefinierte
to_indexed_json
Methode verwenden, um festzulegen, wie die Suchmaschine Ihre Dokumente/Modelle sieht .
was ist, wenn ich 2 verschiedene Index für ein einzelnes Modell haben möchte. Wie definiere ich beide Indizes? – EmFeld
Sie können nicht zwei separate Indizes für ein einziges Modell in Tyre haben. – karmi
Danke, das ist sehr klar. Und so soll das Ergebnis der Methode 'to_indexed_json' im' _source' Element der Suchergebnisse liegen? – aurels