Mientras que los métodos mapping
y to_indexed_json
están relacionados, tienen dos propósitos diferentes, de hecho.
El propósito del método mapping
es definir mapeo para las propiedades del documento dentro de un índice. Es posible que desee definir cierta propiedad como "not_analyzed", por lo que no está dividida en tokens, o establecer un analizador específico para la propiedad, o (como usted menciona) tiempo de indexación factor de impulso. También puede definir multicampo propiedad, formatos personalizados para fecha tipos, etc.
Este mapeo es luego utilizada por ejemplo. cuando Neumático automáticamente creates an index for your model.
El propósito del método to_indexed_json
es definir una serialización JSON para sus documentos/modelos.
El default to_indexed_json
method usa su definición de asignación, para usar sólo las propiedades definidas en la cartografía - de manera que si usted se preocupa lo suficiente como para definir el mapeo , por defecto neumáticos índices únicas propiedades con el mapeo definido.
Ahora, cuando se desea un estricto control sobre la forma en que su modelo es, de hecho, serializado en JSON para elasticsearch, que acaba de definir sus propios métodos to_indexed_json
(como el README instruye).
Esta costumbre MyModel#to_indexed_method
por lo general no se preocupa mapeo definición, y construye la serialización JSON desde cero (mediante el aprovechamiento de ActiveRecord de to_json
, usando un constructor de JSON como jbuilder, o simplemente la construcción de una llanura de edad Hash y llamando Hash#to_json
)
Por lo tanto, para responder a la última parte de su pregunta, utilizando tanto mapping
y to_indexed_json
a pesar de todo no crear ningún conflicto, y de hecho es necesario para utilizar las funciones avanzadas en elasticsearch.
Para resumir:
- Se utiliza el método de
mapping
definir el mapeo para sus modelos para el motor de búsqueda
- Se utiliza un método personalizado
to_indexed_json
para definir cómo el motor de búsqueda ve sus documentos/modelos .
¿Qué sucede si quiero tener 2 índices diferentes para un solo modelo? ¿Cómo defino ambos índices? – EmFeld
No puede tener dos índices separados para un solo modelo actualmente en Tire. – karmi
Gracias eso es muy claro. Entonces, ¿se supone que el resultado del método 'to_indexed_json' está en el elemento' _source' de los resultados de búsqueda? – aurels