我试图在弹性搜索中显示所有匹配文章的标题或正文部分的文档,我在php中编写了以下代码
if(!empty($_GET))
{
$bodysearch=$_GET['bodysearch'];
$titlesearch=$_GET['titlesearch'];
$params = [
'index' => 'pages',
'type' => 'page',
'body' => [
'query' => [
'bool'=>[
'should'=>[
'match'=>['title'=>$titlesearch],
'match'=>['body'=>$bodysearch]
]
]
]
]
];
$result = $client->search($params)
}
并写下以显示结果
foreach($result['hits']['hits'] as $hit)
{
$sources=$hit['_source'];
echo '<a href="javascript:;" style="display:block;">'.$sources['title'].'</a>';
echo substr($sources['body'], 0,100).'....';
}
它仅显示其内容与$bodysearch
中提供的内容相匹配的列表文档,但我想获取与$titlesearch
匹配的文档列表或将$bodysearch
与正文内容匹配或匹配两者,我该怎么办。
答案 0 :(得分:1)
您的bool/should
当前是一个关联数组,第二个匹配正在覆盖第一个匹配数组。使用普通数组,而不是使用match
[...]
个查询
$params = [
'index' => 'pages',
'type' => 'page',
'body' => [
'query' => [
'bool'=>[
'should'=>[
[ 'match'=>['title'=>$titlesearch] ],
[ 'match'=>['body'=>$bodysearch] ]
]
]
]
]
];