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:
- Si utilizza il metodo
mapping
per definire la mappatura per i vostri modelli per il motore di ricerca
- Si utilizza un metodo personalizzato
to_indexed_json
per definire come il motore di ricerca vede tuoi documenti/modelli .
cosa succede se voglio avere 2 indici diversi per un singolo modello. Come posso definire entrambi gli indici? – EmFeld
Non è possibile avere due indici separati per un singolo modello attualmente in Tiro. – karmi
Grazie è molto chiaro. Quindi il risultato del metodo 'to_indexed_json' dovrebbe trovarsi nell'elemento' _source' dei risultati della ricerca? – aurels