perl – 弹性搜索:使用过滤器并应该bool查询

我想使用弹性搜索搜索大型地址数据库,并使其像其他一些应用程序一样,我首先使用邮政编码,这对于缩小搜索查询的其余部分非常有用.

所以用Search::Elasticsearch

我做

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 }},}
        }
    }
);

然而,这只是为$post邮件吐出所有内容,无论$keyword是什么,结果集都不会进一步减少.

我需要将$postcode作为强制条件,但也要另外将其他两个字段作为全文搜索考虑在内.
我该怎么做(我正在查看文档,可能会解释json-> perl hashrefs错误,欢迎任何建议)

对于一个假设的例子:
用户输入NW1 4AQ,上述查询将立即返回,例如,Albany Street和Portland Street,如果用户查询Portland和该邮政编码,而不是同时获得这两个结果,我预计只有Portland Street才能成为结果.现在用上面的内容它只是不断返回两个条目.

解决方法

根据常识,我发现以下内容符合我对bool段的要求:
bool => { 
            must => [
                {match => { pcode => $postcode }},should => [
                {match => { address => $keyword }},minimum_should_match => 1,}

将minimum_should_match设为1(这是一个计数器而不是真/假),感觉就像是在那些应该插入一个OR

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...