【发布时间】:2016-06-14 16:09:28
【问题描述】:
我想使用弹性搜索来搜索大型地址数据库,并使其像其他一些应用程序一样,我首先从邮政编码开始,这非常适合缩小搜索查询的其余部分。
我愿意
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 }},
],
}
}
}
);
但是,这只是为$postcode 吐出所有内容,并且无论$keyword 是什么,结果集都不会进一步减少。
我需要将$postcode 作为强制条件,但也需要单独考虑另外两个字段作为全文搜索。
我应该怎么做(我在看文档,可能会解释 json->perl hashrefs 错误,所以欢迎提出任何建议)
举个假设的例子:
用户输入NW1 4AQ,上面的查询将立即返回,比如奥尔巴尼街和波特兰街,如果用户查询Portland和那个邮政编码,而不是得到这两个结果,我只希望波特兰街是结果。现在有了上面它只是不断返回两个条目。
【问题讨论】:
-
添加了一个冗长的假设示例。
标签: perl elasticsearch