2016-03-16 15 views
6

Questa domanda sembra molto simile a una vecchia domanda pubblicata qui: Retrieve analyzed tokens from ElasticSearch documents, ma per vedere se ci sono dei cambiamenti ho pensato che avrebbe senso postarla di nuovo per l'ultima versione di ElasticSearch.È possibile restituire i campi analizzati in una ricerca ElasticSearch> 2.0?

stiamo cercando di corpi di testo da ricercare nel elasticsearch con il di ricerca-query e campo-mapping utilizzando lo Stemmer palla di neve integrato in elasticsearch. Le prestazioni e i risultati sono grandiosi, ma poiché abbiamo bisogno di avere il corpo del testo con stemmed per la post-analisi, vorremmo che i risultati della ricerca restituiscano i risultati dei risultati della ricerca per i token con stemmed effettivi per il campo di testo per documento.

La mappatura per il campo attualmente si presenta come:

 "TitleEnglish": { 
     "type": "string", 
     "analyzer": "standard", 
     "fields": { 
      "english": { 
      "type": "string", 
      "analyzer": "english" 
      }, 
      "stemming": { 
      "type": "string", 
      "analyzer": "snowball" 
      } 
     } 
     } 

e la query di ricerca viene effettuata in particolare sulla TitleEnglish.stemming. Idealmente mi piacerebbe che restituisse quel campo, ma ritornando ciò non restituisce il campo analizzato ma il campo originale.

Qualcuno sa di qualsiasi modo per fare questo? Abbiamo esaminato Term Vectors, ma sembrano essere restituibili solo per singoli documenti o documenti, non per un risultato di ricerca?

O forse altre soluzioni come Solr o Sphinx offrono questa opzione?


Per aggiungere ulteriori informazioni. Se si corre la seguente query:

GET /_analyze?analyzer=snowball&text=Eight issue of Industrial Lorestan eliminate barriers to facilitate the Committees review of 

Esso restituisce le parole stelo: eight, issu, industri, ecc Questo è esattamente il risultato che vorremmo tornare per ogni documento di corrispondenza per tutte le parole nel testo (quindi non solo le partite).

+0

Quindi, le soluzioni nella domanda a cui ti sei collegato non hanno funzionato? Cosa non ha funzionato? – femtoRgon

+0

Le risposte vettoriali termine non sono una soluzione reale (come descritto sopra). – luckylwk

+0

Sì, l'ho visto, ma non mi ha spiegato nulla. Che cos'è un risultato di ricerca se non un documento? – femtoRgon

risposta

4

A meno che non manchi qualcosa di evidente, perché non restituire semplicemente un terms aggregation nel campo TitleEnglish.stemming?

{ 
    "query": {...}, 
    "aggs" : { 
     "stems" : { 
      "terms" : { 
       "field" : "TitleEnglish.stemming", 
       "size": 50 
      } 
     } 
    } 
} 

Aggiungendo che l'aggregazione per la tua ricerca, si otterrebbe una ripartizione di tutti i termini stelo nel sub-campo TitleEnglish.stemming dai documenti che corrispondono alla tua ricerca.

+0

Grazie per la risposta Val. L'ho provato e sicuramente funziona per quello che stai descrivendo. Accanto ai documenti restituisce un elenco di tutti i token con stemma presenti nei risultati di ricerca. Non è davvero la risposta che stiamo cercando anche se ora dobbiamo ancora analizzare ogni documento e mapparlo ai suoi costituenti. – luckylwk

+0

Quindi è necessario avere i token staminali restituiti per documento? – Val

+0

Sì, sarebbe la situazione che stiamo cercando. Aggiornerò la mia domanda iniziale se ciò non fosse chiaro. – luckylwk

Problemi correlati