2012-10-09 22 views
5

Estoy usando Elasticsearch y escribiendo mi propio contenedor usando WebRequest, ya que NEST (la opción habitual) parece desconcertantemente carecer de la capacidad de insertar un elemento y devolver el ID generado.¿Cómo excluyo el contenido HTML de mi índice elasticsearch?

De todos modos, no hay problemas con el método general. Sin embargo, cualquier contenido HTML se indexa tal como está, es decir, si tengo <strong>test</strong> en un campo, la búsqueda de la consulta "fuerte" devuelve el elemento.

He puesto esto en elasticsearch.yml, en base a un puesto de azar tablero de mensajes que encontré:

index: 
    analysis: 
     analyzer: 
      htmlContentAnalyzer: 
       type: custom 
       tokenizer: standard 
       filter: standard 
       char_filter: html_strip 

Entonces, crear una asignación thusly de mi índice 'contenido', tipo de elemento 'noticias' :

PUT http://localhost:9200/content/news/_mapping 

{ 
    "news" : { 
     "properties" : { 
      "TextContent" : { 
       "type" : "string", 
       "index" : "analyzed", 
       "analyzer" : "htmlContentAnalyzer", 
       "store" : "yes" 
       } 
      } 
     } 
    } 
} 

El store/yes es sólo para "diversión", no hace ninguna diferencia. Lo anterior me da un 200 OK.

Sin embargo, la búsqueda arroja los mismos resultados.

Lo que no ayuda es que la documentación de elasticsearch parece espantosa. Echa un vistazo a esta página:

http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping.html

le da un breve resumen de lo que es la cartografía, y dice más detalles están en la sección de asignación, es decir esta página:

http://www.elasticsearch.org/guide/reference/mapping/

.. .que parece ser realmente terrible No hay nada que se refiera al formato/gráfico de objetos que encontré, sin mencionar "propiedades", "tipo", "analizador", "índice", etc. Hay algunas secciones en el menú a la derecha, p. "_index", pero parecen referirse al ítem como un todo? ¿Y dónde se señala eso?

Así que mi pregunta es en dos frentes:

  • ¿Cómo dejo de etiquetas HTML (y entidades, valores de atributos supongo) que se indexen? - Todavía quiero el HTML almacenado, cuenta
  • ¿Hay alguna fuente mejor para la información/documentación de búsqueda elastica? ¿O lo estoy mirando sin las gafas decodificadoras súper secretas?
+6

¿Vueltas? Solo puedo adivinar porque digo que la documentación es horrible. Bueno, lo es, ¿no? Al menos tengo las bolas para dejar un comentario si estoy cometiendo un error/malentendido –

Respuesta

3

Con todo el crédito a chrismale en #elasticsearch (IRC freenode) -

Buscando contra _all no es bueno: que está indexado con su propio analizador. La consulta en mi campo TextContent funcionó específicamente como se esperaba.

+2

Alternativamente, puede ponerle al analizador el nombre "predeterminado" y luego se aplicará a todos los campos, incluido _all. (Para hacerlo, simplemente reemplace "htmlContentAnalyzer:" con "default:" en su archivo elasticsearch.yml) – imotov

+1

Bueno, estoy enfrentando el mismo problema. ¿Hay alguna manera de lograr lo mismo sin tener que definir el mapeo? –

+0

@AkshatJiwanSharma ¿Te complació averiguarlo sin definir la asignación en el archivo yml? –

Cuestiones relacionadas