yii2 elasticsearch 同一字段匹配多关键词解决方案
•
it
比如 需要对内容里包含关键词1 关键词2 关键词3
方案:将同一字段缓存到不同es的key中
match_prase是完全包含匹配,match是任意一个有就算
public static function es_search($keywords)
{
if(!$keywords || !is_array($keywords)) {
return [];
}
$must = [];
$i = 1;
foreach ($keywords as $v) {
if($v) {
if($i > 3) {
break;
}
$must[] = ['match_phrase' => ["content".$i => $v]];
$i++;
}
}
$query_arr = [
"bool" => [
"must" => $must
],
];
$limit = count($keywords) > 1 ? 10 : 1000;
$res = Es::find()->query($query_arr)->indexBy('member_id')->asArray()->limit($limit)->all();
if($res) {
return array_keys($res);
}
return [];
}