2013-08-15 7 views
6

So che è possibile trovare i termini più utilizzati in un indice con l'utilizzo di faccette.Come trovare le frasi più usate in elasticsearch?

Ad esempio, su seguenti ingressi:

"A B C" 
"AA BB CC" 
"A AA B BB" 
"AA B" 

termine sfaccettatura restituisce questo:

B:3 
AA:3 
A:2 
BB:2 
CC:1 
C:1 

ma mi chiedo che sia possibile elencare seguenti:

AA B:2 
A B:1 
BB CC:1 

....etc... 

E` esiste una funzione in ElasticSearch?

+2

Forse prova a definire un analizzatore personalizzato sul campo che utilizza l'analizzatore 'shingle'. Questo creerà i token combinando le parole (come si sta chiedendo). Puoi quindi provare a vedere se il facet restituirà i conteggi su questi token combinati. Hai un [guarda i documenti sul filtro token shingle] (http://www.elasticsearch.org/guide/reference/index-modules/analysis/shingle-tokenfilter/) – ramseykhalaf

+0

Grazie, potrebbe funzionare. Facets restituisce i token, quindi molto probabilmente restituirà anche questi phrase_tokens. Ma questo non è applicabile per gli indici esistenti e questo aumenterà le dimensioni del file troppo, giusto ?. Ho bisogno di questa funzione per 5 GB di dati ogni giorno. E dopo quel giorno non ne avrò più bisogno. Quindi, suppongo che la cosa migliore sia indicizzare 5 GB di dati alla fine di ogni giorno, archiviare i risultati delle faccette e quindi eliminare i nuovi dati dell'indice. (Andrà avanti in loop) Qualche altra opzione? – shyos

+0

Credo che la risposta sia disponibile su http://stackoverflow.com/questions/39380463/get-top-100-most-used-three-word-phrases-in-all-documents – AlexG

risposta

2

Come accennato nel commento di ramseykhalaf, un filtro a scandole produrrebbe token di lunghezza "n" parole.

"settings" : { 
    "analysis" : { 
     "filter" : { 
      "shingle":{ 
       "type":"shingle", 
       "max_shingle_size":5, 
       "min_shingle_size":2, 
       "output_unigrams":"true" 
      }, 
      "filter_stop":{ 
       "type":"stop", 
       "enable_position_increments":"false" 
      } 
     }, 
     "analyzer" : { 
      "shingle_analyzer" : { 
       "type" : "custom", 
       "tokenizer" : "whitespace", 
       "filter" : ["standard," "lowercase", "shingle", "filter_stop"] 
      } 
     } 
    } 
}, 
"mappings" : { 
    "type" : { 
     "properties" : { 
      "letters" : { 
       "type" : "string", 
       "analyzer" : "shingle_analyzer" 
      } 
     } 
    } 
} 

Vedere questo blog post per tutti i dettagli.

+0

ho aggiunto il fuoco di Sant'Antonio, e penso che sta funzionando, ma http://www.elasticsearch.org/blog/searching-with-shingles/still non mi permette di scoprire quali sono le frasi più usate. come usiamo un facet e herpes zoster, http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-stats-facet.html, ottengo ancora un risultato di una parola, "{ term: term1, count: 203} ", come ottengo" {term: "herpes zoster is": count 5} "? –

+0

Ho gli stessi problemi - non ho ancora provato questo - ma se si fa l'aggregazione/sfaccettatura sul campo di tegole questo aiuto? Non sono sicuro dello scoppio nell'analisi. ad esempio, se ho "buco d'acqua" e "abbeveratoio" e "buca d'acqua", questi verrebbero allo stesso modo, ma forse non dovrebbero. http://project.carrot2.org/index.html è davvero fatto per questo - ma se potessi farlo solo nella ricerca elastica sarebbe fantastico. – Yehosef

+0

Termini e termini L'aggregazione dei termini non funziona con i token a tegole. Non so perché ancora. –

0

Non sono sicuro che elasticsearch ti consentirà di farlo nel modo desiderato. Ma potresti essere interessato a controllare Carrot2 - http://project.carrot2.org/index.html per ottenere ciò che desideri (e probabilmente di più)

Problemi correlati