2014-04-29 13 views
17

Sto affrontando un problema con elasticsearch, in cui non desidero analizzare il termine indicizzato. Ma elasticsearch ha alcune impostazioni predefinite che lo rendono tokenizzato nello spazio. Pertanto la mia query sul facet non restituisce il risultato che voglio.Analizzatore di indici di default in elasticsearch

Ho letto che "index" : "not_analyzed" nelle proprietà del tipo di indice dovrebbe funzionare. Ma il problema è che non conosco la mia struttura del documento in anticipo. Vorrei indicizzare database MySQL casuali su elasticsearch senza conoscere la struttura della tabella.

Come posso impostare elasticsearch tale che per impostazione predefinita utilizza "index" : "not_analyzed" fino a quando non richiesto. Grazie

PS: sto usando java se posso utilizzare direttamente qualsiasi API per esso mi piacerebbe.

risposta

17

userei modelli dinamici - che dovrebbe fare quello che stai cercando:

{ 
    "testtemplates" : { 
     "dynamic_templates" : [ 
      { 
       "template1" : { 
        "match" : "*", 
        "match_mapping_type" : "string", 
        "mapping" : { 
         "type" : "string", 
         "index" : "not_analyzed" 
        } 
       } 
      } 
     ] 
    } 
} 

Maggiori informazioni su questo approccio qui:

https://www.elastic.co/guide/en/elasticsearch/guide/current/custom-dynamic-mapping.html#dynamic-templates

Importante: Se qualcuno suggeriscono questo approccio per risolvere il problema not_analyzed, non funzionerà! L'analizzatore di parole chiave analizza i dati e converte i dati in lettere minuscole.

ad es. Data: ElasticSearchRocks ==> Keyword Analyzer: elasticsearchrocks

Provalo con l'analisi della query e guarda come sta succedendo.

curl -XPUT localhost:9200/testindex -d '{ 
    "index" : { 
     "analysis" : { 
      "analyzer" : { 
       "default" : { 
        "type" : "keyword" 
       } 
      } 
     } 
    } 
}' 

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-keyword-analyzer.html

+0

Grazie modelli dinamici ha funzionato per me. –

+1

particolarmente utile se lo si utilizza sulla mappatura predefinita: http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/default-mapping.html –

+0

I documenti del modello di mappatura dinamico sono stati spostati: https: // www.elastic.co/guide/en/elasticsearch/guide/current/custom-dynamic-mapping.html#dynamic-templates (modifica: oh, è andato avanti e modificato direttamente la risposta .. chi legge i commenti in qualsiasi modo: P) – Kaos

6

aggiungere index.analysis.analyzer.default.type: keyword nel vostro elasticsearch.yml.

+0

Funziona ... Grazie – Sivailango

Problemi correlati