Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@abh
Created September 27, 2010 08:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abh/598752 to your computer and use it in GitHub Desktop.
Save abh/598752 to your computer and use it in GitHub Desktop.
sub find_similar {
my ($self, $job, %args) = @_;
my $size = $args{size} || 5;
$args{offsite} //= ($job->onsite || '') eq 'no' ? 1 : 0;
my $like_text = join " ", map { $job->$_ } $job->editable_fields;
return $self->find(%args,
filters => [{query => {more_like_this => {like_text => $like_text}}}]);
}
sub find {
my $self = shift;
my %args = @_;
my $size = $args{size} || 200;
my $e = $self->elastic;
if (ref $args{q} eq 'ARRAY') {
$args{q} = join " ", @{ $args{q} };
}
my %query;
if ($args{q}) {
%query = (field => { '_all' => filter_keywords($args{q}) })
}
else {
%query = (match_all => {});
}
my @filters = { term => { active => 1 } };
if ($args{filters}) {
push @filters, @{ $args{filters} };
}
if ($args{offsite}) {
push @filters, { terms => { onsite => ["no", "some"] } };
}
%query = (
filtered => {
query => { %query },
filter => (@filters == 1 ? $filters[0] : ({and => \@filters}))
}
);
my $result = $e->search(
index => 'jobso',
type => 'job',
query => \%query,
size => $size,
);
return $self->_inflate($result);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment