Elasticsearch 一个正则表达式用于多个字段

Tom*_*410 3 elasticsearch

我是 Elasticsearch 的新手。我需要编写查询以在其中一个字段中查找正则表达式匹配。

如果我在一个字段中寻找正则表达式,一切正常(PHP 代码):

$data = ['body' => ['query' => ['regexp' => ['abstract' => ".*searchtext.*"]]]];
Run Code Online (Sandbox Code Playgroud)

如果我想查找至少一个字段满足正则表达式的文档该怎么办?

这个查询:

$data = [
  'body' => [
    'query' => [
      'multi_match' => [
        'query' => 'searchtext',
        'fields' => [
          'type',
          'title',
          'abstract',
          'body_text'
        ]
      ]
    ]
  ]
];
Run Code Online (Sandbox Code Playgroud)

只查找与整个单词“searchtext”匹配的文档。

问候,托马斯

Tom*_*410 5

找到答案:

$data = [
  'body' => [
    'query' => [
      'bool' => [
        'should' => [
          ['regexp' => ['type' => ".*searchtext.*"]],
          ['regexp' => ['title' => ".*searchtext.*"]],
          ['regexp' => ['abstract' => ".*searchtext.*"]],
          ['regexp' => ['body_text' => ".*searchtext.*"]],
        ]
      ]
    ]
  ]
];
Run Code Online (Sandbox Code Playgroud)

不像 multi_match 查询那么优雅,但是有效。