Chcę użyć elastycznego wyszukiwania do przeszukiwania dużej bazy adresowej, a żeby było jak kilka innych aplikacji, zaczynam od kodu pocztowego, który najlepiej jest zawęzić w pozostałej części zapytanie wyszukiwania.Elastic Search: użyj filtru i powinno bool zapytanie
Więc z Search::Elasticsearch
zrobić
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 }},
],
}
}
}
);
jednak, że tylko wypluwa wszystko dla $postcode
i niezależnie od tego, co $keyword
jest wynikowa nie jest dodatkowo zmniejszona.
Muszę mieć $postcode
jako warunek obowiązkowy, ale także osobno, a dodatkowo pozostałe dwa pola również należy uwzględnić jako wyszukiwanie pełnotekstowe. W jaki sposób należy to zrobić (Im patrząc na docs i może być interpretacji json-> Perl hashrefs źle więc wszelkie sugestie mile widziane)
Dla hipotetycznego przykładu: Użytkownik wchodzi NW1 4AQ
, Powyższe zapytanie natychmiast wrócić, powiedzmy, Albany Street i Portland Street, jeśli użytkownik wypytuje ten kod pocztowy, zamiast otrzymać oba te wyniki, spodziewam się, że wynikiem będzie tylko Portland Street. W tej chwili z powyższym Po prostu wraca oba wpisy.
Czy możliwe jest stworzenie [minimalny, kompletne i zweryfikowania przykład] (http:... // stackoverflow .com/help/mcve)? –
Dodano przykład hipotetycznego hipotetycznego. – Recct