2015-05-04 9 views
11

Mi chiedo se sia possibile ottenere le dieci parole più frequenti in un campo Elasticsearch su un intero indice o pseudonimo.Elasticsearch word frequency and relations

Qui è quello che sto cercando di fare:

sto indicizzazione dei documenti di testo estratti da vari tipi di documenti (Word, Powerpoint, PDF, ecc) questi vengono analizzati e memorizzati in un campo chiamato doc_content. Vorrei sapere se esiste un modo per trovare le parole più frequenti in un particolare indice che sono memorizzate nel campo doc_content.

Per rendere più chiaro, supponiamo di indicizzare le fatture da Amazon e eBay, ad esempio. Ora supponiamo di avere 100 fatture da Amazon e 20 fatture da eBay. Supponiamo inoltre che la parola "amazon" ricorra per due volte in ciascuna fattura di Amazon e che la parola "ebay" ricorra 3 volte in ciascuna fattura ebay.

Ora, c'è un modo per ottenere un aggregato di ordinamento che mi dice che la parola "amazon" appare nel mio indice 200 volte (100 fatture x 2 occorrenze/fattura) e la parola "ebay" si verifica 60 volte (20 fatture x 3 occorrenze/fattura).

Un'altra domanda è se il primo è possibile, quindi c'è un modo per determinare qual è la parola più frequente che viene dopo una determinata parola?

Ad esempio: si supponga di avere 100 documenti. 60 di questi documenti contiene il termine "Old Cat" e 40 contiene il termine "Old Dog" e, per ragioni di argomentazione, assumiamo che queste parole compaiano una sola volta in ogni documento.

Ora, se possiamo ottenere la frequenza della parola "vecchio", che nel nostro caso dovrebbe essere 100. Possiamo quindi determinare una relazione con la parola che viene subito dopo di avere qualcosa di simile:

   __________ Cat (60) 
       | 
Old (100)-----| 
       |__________ Dog (40) 

risposta

3

Per ottenere frequenze di termine è possibile utilizzare term vectors. Tuttavia, dovrai prima memorizzarli e in secondo luogo, puoi recuperarli solo per un determinato documento.

Per quanto ne so, non è possibile aggregare i vettori a lungo termine.

Forse potresti ottenere parte di ciò che desideri utilizzando i campi scriptati. Ma poi di nuovo, Groovy è attualmente sfavorito a causa di problemi di sicurezza e l'aggregazione su campi script è potenzialmente piuttosto lenta.

Tra l'altro, domande simili è stato chiesto prima:

+0

bene può elaborare più sull'utilizzo di campi script per frequenze di parole aggregati. La sicurezza non è un problema poiché il mio cluster ES non è pubblico. –

+0

È possibile utilizzare i campi script indicizzati per calcolare autonomamente le frequenze delle parole. Non penso che sia una buona opzione, ma potrebbe funzionare se fossi interessato solo a un piccolo insieme di parole chiave predefinite. –