es 复杂逻辑检索核心逻辑

    为了应对海量数据的复杂逻辑检索需要对检索业务做对应改造,因为对数据实时准确性有要求故采用es引擎

检索核心逻辑

protected function buildOperator($field, $value): array
{
// 不是数组的为 字段 =
if (!is_array($value)) {
return ['term' => [$field => $value]];
}

$must = [];

// in 查询
if ($value[0] == 'in') {
$must = ['terms' => [$field => $value[1]]];
}
// not in 查询
else if ($value[0] == 'not_in') {
$must = ['bool' => ['must_not' => ['terms' => [$field => $value[1]]]]];
}
// or 查询
else if ($value[0] == 'or') {
$should = [];
foreach ($value[1] as $val) {
$should[]['term'][$field] = $val;
}
$must = ['bool' => ['should' => $should]];
}
// 大于
else if ($value[0] == '>') {
$must = ['range' => [$field => ['gt' => $value[1]]]];
}
// 大于等于
else if ($value[0] == '>=') {
$must = ['range' => [$field => ['gte' => $value[1]]]];
}
// 小于
else if ($value[0] == '<') {
$must = ['range' => [$field => ['lt' => $value[1]]]];
}
// 小于等于
else if ($value[0] == '<=') {
$must = ['range' => [$field => ['lte' => $value[1]]]];
}
// 范围 查询
else if ($value[0] == 'between') {
$must = ['range' => [$field => ['gte' => $value[1][0], 'lte' => $value[1][1]]]];
}
// like 查询
else if ($value[0] == 'like') {
$must = ['multi_match' => [
'query' => $value[1],
'fields' => explode('|', $field),
'type' => 'phrase'
]];
}
// and like 查询
else if ($value[0] == 'and_like') {
$must = ['match' => [$field => [
'query' => implode(' ', $value[1]),
'operator' => 'and'
]]];
}

return $must;
}

 

posted @ 2023-02-27 16:28  给香菜送点香菜  阅读(33)  评论(0)    收藏  举报