2012-07-26 12 views
20

Durante la lettura del Tire doc, ho avuto l'impressione che si dovrebbe usare sia mapping o to_indexed_json metodi, dal momento che (la mia comprensione era ..) il mapping viene utilizzato per alimentare il to_indexed_json.elasticsearch e pneumatici: Uso della mappatura e to_indexed_json

Il problema è che ho trovato alcuni tutorial in cui vengono utilizzati entrambi. PERCHÉ?

Fondamentalmente, la mia app funziona ora con il to_indexed_json ma non riesco a capire come impostare il valore di boost di alcuni degli attributi (da qui il motivo per cui ho iniziato a guardare la mappatura) e mi chiedevo se l'utilizzo di entrambi sarebbe creare alcuni conflitti.

risposta

49

Mentre i metodi mapping e to_indexed_json sono correlati, in realtà servono a due scopi diversi.

Lo scopo del metodo mapping è definire mappatura per le proprietà del documento all'interno di un indice. Puoi definire determinate proprietà come "not_analyzed", quindi non è suddiviso in token o impostare un analizzatore specifico per la proprietà o (come menzionato) tempo di indicizzazione boost factor. Si può anche definire multicampo proprietà, formati personalizzati per data tipi, ecc

Questo mappatura viene quindi utilizzato ad es. quando Tire automaticamente creates an index for your model.

Lo scopo del metodo to_indexed_json è quello di definire una serializzazione JSON per i vostri documenti/modelli.

Il default to_indexed_json method fa uso la tua definizione di mappatura, di utilizzare solo le proprietà definite nella mappatura - su una base che, se si cura abbastanza per definire la mappatura , per impostazione predefinita Tire indici Solo gli oggetti con mappatura definita.

Ora, quando si desidera uno stretto controllo sul modo in cui il modello è in realtà serializzato in JSON per elasticsearch, basta definire le proprie to_indexed_json metodi (come il README istruisce).

Questa usanza MyModel#to_indexed_method di solito non si preoccupa mappatura definizione, e costruisce la serializzazione JSON da zero (sfruttando ActiveRecord di to_json, utilizzando un costruttore di JSON, come jbuilder, o semplicemente la costruzione di una pianura vecchio Hash e chiamando Hash#to_json).

Quindi, per rispondere all'ultima parte della tua domanda, utilizzando sia mapping e to_indexed_json sarà assolutamente non creare conflitti, ed è in effetti necessario per utilizzare le funzioni avanzate in elasticsearch.

Per riassumere:

  1. Si utilizza il metodo mapping per definire la mappatura per i vostri modelli per il motore di ricerca
  2. Si utilizza un metodo personalizzato to_indexed_json per definire come il motore di ricerca vede tuoi documenti/modelli .
+1

cosa succede se voglio avere 2 indici diversi per un singolo modello. Come posso definire entrambi gli indici? – EmFeld

+0

Non è possibile avere due indici separati per un singolo modello attualmente in Tiro. – karmi

+0

Grazie è molto chiaro. Quindi il risultato del metodo 'to_indexed_json' dovrebbe trovarsi nell'elemento' _source' dei risultati della ricerca? – aurels

Problemi correlati