Desidero utilizzare la ricerca elastica per cercare un database di indirizzi di grandi dimensioni e per renderlo simile ad altre applicazioni, comincio innanzitutto con il codice postale, che è ottimo per restringere il resto di la query di ricerca.Ricerca elastica: utilizzare il filtro e la query bool
Quindi, con Search::Elasticsearch
faccio
my $scroll = $e->scroll_helper(index => 'pdb', search_type => 'scan', size => 100,
body => {
query => {
bool => {
filter => [
{match => { pcode => $postcode }},
],
should => [
{match => { address => $keyword }},
{match => { name => $keyword }},
],
}
}
}
);
Tuttavia che appena sputa fuori tutto per $postcode
e indipendentemente da ciò che $keyword
è il set di risultati non è ulteriormente ridotto.
Ho bisogno di avere $postcode
come condizione obbligatoria ma anche separatamente e in aggiunta gli altri due campi da prendere in considerazione come ricerca di testo completo. Come devo fare questo (sto guardando la documentazione e potrebbe essere l'interpretazione json-> perl hashrefs sbagliato così eventuali suggerimenti di benvenuto)
Per un esempio ipotetico: entra utente NW1 4AQ
, La query sopra ritorna immediatamente, per esempio, Albany Street e Portland Street, se l'utente interroga il codice postale Portland
e, invece di ottenere entrambi questi risultati, mi aspetto che solo Portland Street sia il risultato. In questo momento con quanto sopra, continua a restituire entrambe le voci.
e 'possibile creare un [esempio minimo, completo e verificabile] (http:... // StackOverflow .com/help/mcve)? –
Aggiunge un ipotetico esempio ipotetico. – Recct