From 3331ccf4800540adb9072941eb8b9015be73ca7d Mon Sep 17 00:00:00 2001 From: vanry Date: Mon, 25 Jun 2018 11:29:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=90=9C=E7=B4=A2=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E9=AB=98=E4=BA=AE=E6=98=BE=E7=A4=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 29 +++++++++++++++++++++++++++-- src/Highlighter.php | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 src/Highlighter.php diff --git a/README.md b/README.md index a2e05b7..d9a39c0 100644 --- a/README.md +++ b/README.md @@ -81,8 +81,6 @@ php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider" ```php -composer('search', function ($view) { + $tokenizer = app('tntsearch.tokenizer')->driver(); + + $view->with('highlighter', new Highlighter($tokenizer)); +}); +``` + +```php +// search.blade.php + +{!! $highlighter->highlight($article->title, $query) !!} + +{!! $highlighter->highlight($article->excerpt, $query) !!} +``` + +> 默认使用 `em` 作为高亮标签,在 `css` 中设置样式即可。 + ## 教程 + [laravel下TNTSearch+jieba-php实现全文搜索](https://baijunyao.com/article/154) diff --git a/src/Highlighter.php b/src/Highlighter.php new file mode 100644 index 0000000..7ca0274 --- /dev/null +++ b/src/Highlighter.php @@ -0,0 +1,34 @@ +tokenizer = $tokenizer ?: new Tokenizer; + } + + public function highlight($text, $query, $tag = 'em') + { + $terms = $this->tokenizer->tokenize($query); + + $patterns = array_map(function ($term) { + return "/{$term}/is"; + }, array_unique($terms)); + + $replacement = "<{$tag}>\$0"; + + return preg_replace($patterns, $replacement, $text); + } + + public function getTokenizer() + { + return $this->tokenizer; + } +}