2013-05-22 17 views
6

Sto cercando di capire come configurare elasticsearch in modo che sia possibile effettuare ricerche di stringhe di query con caratteri jolly nei campi che includono trattini.Campi indice con trattini in Elasticsearch

devo documenti che assomigliano a questo:

{ 
    "tags":[ 
     "deck-clothing-blue", 
     "crew-clothing", 
     "medium" 
    ], 
    "name":"Crew t-shirt navy large", 
    "description":"This is a t-shirt", 
    "images":[ 
     { 
     "id":"ba4a024c96aa6846f289486dfd0223b1", 
     "type":"Image" 
     }, 
     { 
     "id":"ba4a024c96aa6846f289486dfd022503", 
     "type":"Image" 
     } 
    ], 
    "type":"InventoryType", 
    "header":{ 
    } 
} 

ho cercato di utilizzare un filtro word_delimiter e un tokenizzatore spazio bianco:

{ 
"settings" : { 
    "index" : { 
     "number_of_shards" : 1, 
     "number_of_replicas" : 1 
    }, 
    "analysis" : { 
     "filter" : { 
      "tags_filter" : { 
       "type" : "word_delimiter", 
       "type_table": ["- => ALPHA"] 
      } 
     }, 
     "analyzer" : { 
      "tags_analyzer" : { 
       "type" : "custom", 
       "tokenizer" : "whitespace", 
       "filter" : ["tags_filter"] 
      } 
     } 
    } 
}, 
"mappings" : { 
    "yacht1" : { 
     "properties" : { 
      "tags" : { 
       "type" : "string", 
       "analyzer" : "tags_analyzer" 
      } 
     } 
    } 
} 
} 

ma queste sono le ricerche (per i tag) e la loro risultati:

deck*  -> match 
deck-* -> no match 
deck-clo* -> no match 

Qualcuno può vedere dove sto andando male?

Grazie :)

+0

Cosa succede quando si rimuove il filtro? – concept47

+0

La rimozione del filtro non sembra influire sui risultati della ricerca. –

risposta

8

L'analizzatore va bene (anche se avrei perso il filtro), ma l'analizzatore di ricerca non è specificato in modo che sta usando l'analizzatore di serie per la ricerca nel campo tag, che estrae il trattino quindi prova a interrogare su di esso (esegui curl "localhost:9200/_analyze?analyzer=standard" -d "deck-*" per vedere cosa intendo)

in sostanza, "deck- *" viene cercato come "deck *" non c'è una parola che ha solo "deck" in esso così non riesce .

"deck-clo *" viene ricercato come "deck clo *", di nuovo non vi è alcuna parola che sia solo "deck" o che inizi con "clo", quindi la query non riesce.

mi piacerebbe fare le seguenti modifiche

"analysis" : { 
    "analyzer" : { 
     "default" : { 
      "tokenizer" : "whitespace", 
      "filter" : ["lowercase"] <--- you don't need this, just thought it was a nice touch 
     } 
    } 
} 

poi sbarazzarsi dell'analizzatore speciale sui Tags

"mappings" : { 
    "yacht1" : { 
     "properties" : { 
      "tags" : { 
       "type" : "string" 
      } 
     } 
    } 
} 

fatemi sapere come va.

+1

impressionanti, grazie :) questo è il config ho finito con: { "Impostazioni": { "indice": { "number_of_shards": 1, "number_of_replicas": 1} , "analisi": { "analyzer": { "default": { "tokenizer": "spazio bianco", "filtro": [ "minuscolo"] }} }} } –

Problemi correlati