gpt4 book ai didi

php - Elasticsearch multi_match 结合普通匹配

转载 作者:行者123 更新时间:2023-12-03 21:35:01 25 4
gpt4 key购买 nike

我有以下功能可以在 elasticsearch 中搜索结果。

我想用 PHP 和 Guzzle 执行以下请求。

  /**
* {@inheritdoc}
*/
public function sendSearchRequest($es_node, $request) {
try {
if (isset($es_node)) {
$ssl = $es_node->get('field_ess_verify_ssl')->value;
$ssl_val = $ssl ? 'https://' : 'http://';

$body = [
'json' => [
'query' => [
'bool' => [
'should' => [
[
'multi_match' => [
'query' => $request->get('search'),
'fields' => ['message', 'event.type'],
'operator' => 'AND',
],
],
[
'match' => [
'event.type' => $request->get('type'),
],
],
[
'match' => [
'event.labels' => $request->get('label'),
],
],
],
],
],
],
];

$response = $this->httpClient->request('POST', $ssl_val . $es_node->get('field_ess_host')->value . ':' . $es_node->get('field_ess_port')->value . '/***/***/_search?pretty', $body)
->getBody()
->getContents();

return json_decode($response, TRUE)['hits']['hits'] ?? '';
}
} catch (Exception $exception) {
\Drupal::logger(__METHOD__)->error('No ES node has been found.');
return FALSE;
}
}

但是有了这个,我得到了一个解析异常,这意味着 multi_match 不能以这种方式工作。如果我在那个地方使用“正常”匹配,它就可以正常工作,但我仅限于 1 个字段。

其他匹配字段使用其他表单字段进行输入,并且始终具有一个值。

但是对于表单字段“描述搜索”,我想使用 AND 运算符查看多个字段。

有谁知道如何解决这个问题?

表格截图:

enter image description here

最佳答案

您的查询对我来说很好,并在我的测试中运行。它应该按原样工作。

但为了 future 读者的利益,这就是 multi-match queries work with elastic search .

GET /_search
{
"query": {
"multi_match" : {
"query": "Will Smith",
"type": "best_fields",
"fields": [ "first_name", "last_name" ],
"operator": "and"
}
}
}

请注意, Elasticsearch 文档中的此示例本质上与您上面的代码部分相同:
...
'multi_match' => [
'query' => $request->get('search'),
'fields' => ['message', 'event.type'],
'operator' => 'AND',
],
...

这就是多匹配查询的形成方式,您做到了。

关于php - Elasticsearch multi_match 结合普通匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59581212/

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