PHP MySQL ElasticSearch迁移查询或

k3bvogb1  于 2022-12-17  发布在  PHP
关注(0)|答案(1)|浏览(93)

我想不出以下几点:
具有地址字段(国家、县、市)和“操作”字段的数据库,选项:地方、国家和国际
我想根据位置和“操作”状态找到匹配。所以我基本上是在搜索如何在ElasticSearch中使用MySQL OR。据我理解,这是“应该”。
因此,无论选择哪个城市,任何在国际上运营的条目、任何在同一国家/地区的全国性运营的条目以及任何在同一县的本地运营的条目都应包含在结果中
作为一个测试案例,我尝试了几种方法,其中包括:

$arrayinternationally[] = array('match' => array('operate' => 'internationally'));

$arrayNationally[] = array('match' => array('operate' => 'nationally'));
$arrayNationally[] = array('match' => array('country' => '60'));

$arrayLocally[] = array('match' => array('operate' => 'locally'));
$arrayLocally[] = array('match' => array('country' => 'UK'));
$arrayLocally[] = array('match' => array('county' => '60'));

$params = [
    'index' => 'bzlistings',

    'body' => [
        'from' => 0,
        'size' => 80, 
        'query' => [
            'bool' => [
                'should' => [
                    'bool' => [
                        'should' => $arrayinternationally
                    ]
                ],
                'should' => [
                    'bool' => [
                        'should' => $arrayNationally
                    ]
                ],
                'should' => [
                    'bool' => [
                        'should' => $arrayLocally
                    ]
                ],
            ],
        ],
    ],
];

那些在另一个国家的条目与“经营”设置为“国际”,不包括在内,这是错误的。
如何在ElasticSearch中实现这一点?
谢谢,彼得

zkure5ic

zkure5ic1#

我认为布尔查询有问题。您可以使用以下查询进行测试吗?

$params = [
    'index' => 'bzlistings',
    'body' => [
        'from' => 0,
        'size' => 80, 
        'query' => [
            'bool' => [
                'should' => [
                    [
                        'bool' => [
                            'must' => $arrayinternationally
                        ]
                    ],
                    [
                        'bool' => [
                            'must' => $arrayNationally
                        ]
                    ],
                    [
                        'bool' => [
                            'must' => $arrayLocally
                        ]
                    ],
                ],
            ],
        ],
    ],
];

但是我认为,在您的情况下,内部布尔值需要是must而不是should,而且,我建议如果您正在寻找精确匹配,可以使用term查询而不是match
通常,bool查询结构如下所示:

GET sample-index/_search
{
  "query": {
    "bool": {
      "should": [
        {},
        {}
      ]
    }
  }
}

相关问题