diff --git a/.woodpecker/build.yml b/.woodpecker/build.yml index ded5229..357b389 100644 --- a/.woodpecker/build.yml +++ b/.woodpecker/build.yml @@ -72,7 +72,7 @@ pipeline: commands: - apt-get update && apt-get -y install rsync - cd /data/deblan/deblan.io-murph/ - - rsync -avz "$CI_WORKSPACE/" "$CI_COMMIT_SHA" + - rsync -az "$CI_WORKSPACE/" "$CI_COMMIT_SHA" services: db: diff --git a/src/Repository/Blog/PostRepositoryQuery.php b/src/Repository/Blog/PostRepositoryQuery.php index 8396d25..5f3d3b3 100644 --- a/src/Repository/Blog/PostRepositoryQuery.php +++ b/src/Repository/Blog/PostRepositoryQuery.php @@ -65,7 +65,8 @@ class PostRepositoryQuery extends RepositoryQuery { $keywords = explode(' ', $keywords); - $filter = fn($keyword) => trim($keyword) !== '' && preg_match('/[a-zA-Z]+/', $keyword) && mb_strlen($keyword) > 3; + $filterWords = fn($keyword) => trim($keyword) !== '' && preg_match('/[a-zA-Z]+/', $keyword) && mb_strlen($keyword) > 2; + $filter = fn($keyword) => trim($keyword) !== '' && preg_match('/[a-zA-Z]+/', $keyword) && mb_strlen($keyword) > 2; $keywords = array_filter($keywords, $filter); @@ -93,54 +94,60 @@ class PostRepositoryQuery extends RepositoryQuery $matches = []; foreach ($results as $k => $v) { - $added = false; $initWords = explode(' ', $v['title']); $words = []; foreach ($initWords as $initWord) { - $words = array_merge($words, preg_split('/[:_-]+/', $initWord)); + $words = array_merge($words, preg_split('/[:_\'-]+/', $initWord)); } - $words = array_filter($words, $filter); + $words = array_filter($words, $filterWords); foreach ($keywords as $keyword) { - if ($added) { - continue; + if(str_contains(mb_strtolower($v['content']), mb_strtolower($keyword))) { + $similarity = 99; + + if (isset($matches[$v['id']])) { + $matches[$v['id']]['similarity'] += $similarity; + } else { + $matches[$v['id']] = [ + 'id' => $v['id'], + 'title' => $v['title'], + 'published_at' => $v['published_at'], + 'similarity' => $similarity, + ]; + } } foreach ($words as $word) { - if ($added) { - continue; - } - if (str_contains(mb_strtolower($word), mb_strtolower($keyword))) { - $matches[] = [ - 'id' => $v['id'], - 'published_at' => $v['published_at'], - 'similarity' => 100, - ]; + $similarity = 150; - $added = true; - } elseif(str_contains($v['content'], $keyword)) { - $matches[] = [ - 'id' => $v['id'], - 'published_at' => $v['published_at'], - 'similarity' => 99, - ]; - - $added = true; + if (isset($matches[$v['id']])) { + $matches[$v['id']]['similarity'] += $similarity; + } else { + $matches[$v['id']] = [ + 'id' => $v['id'], + 'title' => $v['title'], + 'published_at' => $v['published_at'], + 'similarity' => $similarity, + ]; + } } else { $lev = levenshtein($word, $keyword); $similarity = 100 - ($lev * 100 / mb_strlen($word)); if ($similarity > 70) { - $matches[] = [ - 'id' => $v['id'], - 'published_at' => $v['published_at'], - 'similarity' => $similarity, - ]; - - $added = true; + if (isset($matches[$v['id']])) { + $matches[$v['id']]['similarity'] += $similarity; + } else { + $matches[$v['id']] = [ + 'id' => $v['id'], + 'title' => $v['title'], + 'published_at' => $v['published_at'], + 'similarity' => $similarity, + ]; + } } } }