gpt4 book ai didi

perl - Elasticsearch : use filter and should bool query

转载 作者:行者123 更新时间:2023-11-29 02:46:05 25 4
gpt4 key购买 nike

我想使用 Elasticsearch 来搜索大型地址数据库,并使其像其他一些应用程序一样,我首先从邮政编码开始,这对于缩小其余搜索查询的范围非常有用。

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

然而,这只会吐出 $postcode 的所有内容,而不管 $keyword 是什么,结果集都不会进一步减少。

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

举个假设的例子:用户输入 NW1 4AQ,如果用户查询 Portland 那个邮政编码,上面的查询将立即返回,比如说 Albany Street 和 Portland Street,而不是同时获得这两个结果,我希望只有 Portland Street 是结果。现在有了上面它只是不断返回两个条目。

最佳答案

根据常识,我发现下面的代码对 bool 段做了我想要的:

bool => { 
must => [
{match => { pcode => $postcode }},
],
should => [
{match => { address => $keyword }},
{match => { name => $keyword }},
],
minimum_should_match => 1,
}

minimum_should_match 设置为 1(这是一个计数器而不是 true/false),感觉就像是在那些 should 中插入一个 OR

关于perl - Elasticsearch : use filter and should bool query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37817146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com