2012-07-26 11 views
20

Mientras lee el documento Tire, que estaba bajo la impresión de que usted debe usar ya sea mapping o to_indexed_json métodos, ya que (mi entendimiento era ..) la mapping se utiliza para alimentar el to_indexed_json.Elasticsearch y Llantas: a través de cartografía y to_indexed_json

El problema es que encontré algunos tutoriales donde se usan ambos. ¿POR QUÉ?

Básicamente, mi aplicación funciona ahora con el to_indexed_json pero no puedo averiguar cómo establecer el valor de impulso de algunos de los atributos (de ahí el motivo por el que empecé a buscar mapeo) y me preguntaba si usar ambos crea algunos conflictos

Respuesta

49

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:

  1. Se utiliza el método de mapping definir el mapeo para sus modelos para el motor de búsqueda
  2. Se utiliza un método personalizado to_indexed_json para definir cómo el motor de búsqueda ve sus documentos/modelos .
+1

¿Qué sucede si quiero tener 2 índices diferentes para un solo modelo? ¿Cómo defino ambos índices? – EmFeld

+0

No puede tener dos índices separados para un solo modelo actualmente en Tire. – karmi

+0

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

Cuestiones relacionadas