2012-10-09 12 views
5

Sto utilizzando Elasticsearch e sto scrivendo il mio wrapper utilizzando WebRequest poiché NEST (la solita scelta) sembra sconcertante che non sia possibile inserire un elemento e restituire l'ID generato.Come escludere il contenuto HTML dal mio indice elasticsearch?

In ogni caso, nessun problema con il metodo generale. Tuttavia, qualsiasi contenuto HTML viene indicizzato così com'è, ad esempio se ho <strong>test</strong> in un campo, quindi una ricerca per la query "strong" restituisce l'elemento.

ho messo questo in elasticsearch.yml, sulla base di un post message board casuale che ho trovato:

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

Poi, ho creare una mappatura questa convenzione per il mio indice di 'contenuto', tipo di elemento 'news' :

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

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

Il store/yes è solo per "divertimento", non fa differenza. Quanto sopra mi dà un 200 OK.

Tuttavia, la ricerca restituisce gli stessi risultati.

Ciò che non aiuta è che la documentazione di elasticsearch sembra spaventosa. Check out questa pagina:

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

ti dà un breve riepilogo di ciò che è la mappatura, e dice maggiori dettagli si trovano nella sezione di mappatura, vale a dire questa pagina:

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

.. .questo sembra essere veramente terribile. Non c'è nulla che si riferisca al grafico formato/oggetto trovato - nessuna menzione di "proprietà", "tipo", "analizzatore", "indice" ecc. Ci sono alcune sezioni nel menu a destra, ad es. "_index", ma sembrano riferirsi all'articolo nel suo complesso? E dove viene indicato?

Quindi la mia domanda è su due fronti:

  • Come faccio a smettere di tag HTML (e le entità, attribuisco valori immagino) essere indicizzato? - Voglio ancora l'HTML memorizzato, ti ricordo
  • Esiste una fonte migliore per informazioni/documentazione elasticsearch? O lo sto guardando senza gli occhiali decoder super-segreti?
+6

Downvoted? Posso solo indovinare perché dico che la documentazione è terribile? Beh, lo è, non è vero? Almeno avere le palle per lasciare un commento se sto facendo un errore/incomprensione –

risposta

3

Con tutto il merito per chrismale su #elasticsearch (freenode IRC) -

Ricerca contro _all non va bene: che è indicizzato con il proprio analizzatore. Query sul mio campo TextContent ha funzionato in modo specifico come previsto.

+2

In alternativa, è possibile assegnare un nome all'analizzatore "predefinito" e quindi verrà applicato a tutti i campi incluso _all. (Per farlo, basta sostituire "htmlContentAnalyzer:" con "default:" nel tuo file elasticsearch.yml) – imotov

+1

Bene, sto affrontando lo stesso problema. C'è un modo per ottenere lo stesso senza dover definire la mappatura? –

+0

@AkshatJiwanSharma Siete felici di capirlo senza definire la mappatura nel file yml? –

Problemi correlati