Siamo la memorizzazione di un campo title
nel nostro indice e si desidera utilizzare il campo per due scopi:Come ordinare sul campo analizzato/tokenizzato in Elasticsearch?
- Stiamo analizzando con un filtro Ngram modo da possiamo fornire completamento automatico e risultati immediati
- Vogliamo essere in grado di elencare i risultati utilizzando un ordinamento ASC sul campo
title
anziché sul punteggio.
L'indice/filtro/analizzatore è definito in questo modo:
array(
'number_of_shards' => $this->shards,
'number_of_replicas' => $this->replicas,
'analysis' => array(
'filter' => array(
'nGram_filter' => array(
'type' => 'nGram',
'min_gram' => 2,
'max_gram' => 20,
'token_chars' => array('letter','digit','punctuation','symbol')
)
),
'analyzer' => array(
'index_analyzer' => array(
'type' => 'custom',
'tokenizer' =>'whitespace',
'char_filter' => 'html_strip',
'filter' => array('lowercase','asciifolding','nGram_filter')
),
'search_analyzer' => array(
'type' => 'custom',
'tokenizer' =>'whitespace',
'char_filter' => 'html_strip',
'filter' => array('lowercase','asciifolding')
)
)
)
),
Il problema che stiamo vivendo è risultati imprevedibili quando abbiamo Ordina sul campo title
. Dopo aver fatto un po 'di ricerca, abbiamo trovato questo alla fine della pagina sort
uomo al elasticsearch ... (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html#_memory_considerations)
Per i tipi di corda a base, il campo ordinato in base non dovrebbe essere analizzato/token.
Come possiamo entrambi analizzare il campo e ordinare in seguito? Abbiamo bisogno di memorizzare il campo due volte con uno utilizzando not_analyzed
per ordinare? Poiché il campo _source
memorizza anche il valore title
nello stato originale, è possibile non utilizzarlo per l'ordinamento?
Esattamente quello che stavo cercando, grazie! Mi piace soprattutto la parte relativa a "L'approccio ingenuo di indicizzare la stessa stringa in due modi sarebbe quello di includere due campi separati nel documento" su una pagina correlata a quella a cui ci si è collegati;) – oucil
Se si ha lo slug del titolo memorizzato , probabilmente questo è un campo "not_analyzed", quindi puoi ordinare per slug. – Liko
Conosci la risposta per la seconda parte della domanda: "Poiché il campo _source sta anche memorizzando il valore del titolo nel suo stato originale, non può essere usato per ordinare?" Sono curioso di sapere perché in questo caso non è possibile ordinare per valore di origine? –