2012-07-26 6 views
20

Während der Tire doc lesen, ich habe den Eindruck, dass Sie entweder mapping oder to_indexed_json Methoden verwenden sollten, da (mein Verständnis war ..) die mapping verwendet wird, um die to_indexed_json zu füttern.Elasticsearch & Reifen: Mit Mapping und to_indexed_json

Das Problem ist, dass ich einige Tutorials gefunden habe, wo beide verwendet werden. WARUM?

Grundsätzlich funktioniert meine App im Moment mit der to_indexed_json, aber ich kann nicht herausfinden, wie der Boost-Wert einiger Attribute (daher der Grund, dass ich begann Mapping) zu setzen und ich fragte mich, ob beide verwenden würde erzeuge einige Konflikte.

Antwort

49

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:

  1. Sie verwenden die mapping Methode, um die Zuordnung für Ihre Modelle für die Suchmaschine definieren
  2. Sie eine benutzerdefinierte to_indexed_json Methode verwenden, um festzulegen, wie die Suchmaschine Ihre Dokumente/Modelle sieht .
+1

was ist, wenn ich 2 verschiedene Index für ein einzelnes Modell haben möchte. Wie definiere ich beide Indizes? – EmFeld

+0

Sie können nicht zwei separate Indizes für ein einziges Modell in Tyre haben. – karmi

+0

Danke, das ist sehr klar. Und so soll das Ergebnis der Methode 'to_indexed_json' im' _source' Element der Suchergebnisse liegen? – aurels