2012-10-24 9 views
10

Provare a utilizzare ElasticSearch per creare una ricerca che utilizza la distanza da un punto centrale per influenzare la pertinenza.ElasticSearch: utilizza la distanza dal punto per influire sulla pertinenza della query

Non voglio semplicemente ordinare la distanza da un punto, che so è possibile, perché voglio che la rilevanza basata sulla query ricercata influenzi anche i risultati.

Mi piacerebbe passare una stringa di ricerca, dire "caffè" e un lat/lon, dire "38, -77", e ottenere i miei risultati ordinati da una combinazione di quanto sono correlati a "caffè" "e quanto sono vicini a" 38, -77 ".

Grazie!

risposta

6

È possibile utilizzare distance function nello script di Custom Score Query per modificare _score in base alla distanza da un punto centrale.

+0

Questi pesi verranno applicati dopo la ricerca effettiva? Il motivo per cui lo chiedo è perché se il limite della ricerca era di 100 risultati e i risultati della corrispondenza totale erano 1000, alcuni risultati molto ravvicinati potrebbero essere lasciati fuori se venissero dopo i primi 100. –

+0

Questi pesi sarebbero stati applicati dopo la ricerca ma prima del recupero. Viene eseguita la prima ricerca e vengono raccolti 1000 (nel tuo esempio). Per ogni risultato raccolto, il punteggio di pertinenza viene calcolato utilizzando lo script fornito e vengono conservati i primi 100 risultati. Quando vengono elaborati tutti i 1000 record dei risultati della ricerca, vengono recuperati i primi 100 record. – imotov

+0

Grazie mille per il tuo aiuto! E 'così che elasticsearch funziona sempre? Sembra che per alcune query che includono una grande quantità di "sfocatura", il set di ricerca potenziale potrebbe includere milioni di risultati con bassa rilevanza. In che modo elasticsearch sa quando smettere di guardare? –

10

Il tipo di query function_score aggiunto di recente (0.90.4) aggiunge il supporto per la classifica in base alla distanza. Questa è un'alternativa al tipo di query punteggio personalizzato.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

Un esempio sollevato da lì:

"query": { 
    "function_score": { 
    "functions": [ 
     { "gauss": { "loc": { "origin": "51,0", "scale": "5km" }}}, 
    ] 
    } 
} 

Ciò vale una funzione di decadimento (ci sono diversi) ad un campo ("loc") che segna contro la distanza da un'origine dati un scala particolare. Questo è esattamente ciò che vorresti per il posizionamento a distanza dato che ti dà molta flessibilità su come dovrebbe classificarsi senza scrivere script personalizzati.

+0

Che tipo di campo è "loc"? Puoi spiegarci un po 'di più? Ho qualcosa come questo "" loc ":" 12.5,65.5 "' e sembra non funzionare. –

+0

potrebbe essere cambiato da quando ho scritto questo, c'è stato un sacco di cambiamenti nel settore geografico nelle recenti versioni di elasticsearch. 0.90.4 è molto tempo fa. –

+0

Lo scopriremo. Grazie ! –

Problemi correlati