From 0732dc7d2c239d792e2c9f02fa378a18a6d01070 Mon Sep 17 00:00:00 2001 From: Tom Lingham Date: Sat, 14 May 2016 18:14:03 +1000 Subject: [PATCH] Add Fuzzy Search driver with unicode support --- config/searchy.php | 4 ++ src/Matchers/AcronymUnicodeMatcher.php | 31 +++++++++++++++ .../ConsecutiveCharactersUnicodeMatcher.php | 45 ++++++++++++++++++++++ src/Matchers/StudlyCaseUnicodeMatcher.php | 36 +++++++++++++++++ src/SearchDrivers/FuzzySearchUnicodeDriver.php | 20 ++++++++++ 5 files changed, 136 insertions(+) create mode 100644 src/Matchers/AcronymUnicodeMatcher.php create mode 100644 src/Matchers/ConsecutiveCharactersUnicodeMatcher.php create mode 100644 src/Matchers/StudlyCaseUnicodeMatcher.php create mode 100644 src/SearchDrivers/FuzzySearchUnicodeDriver.php diff --git a/config/searchy.php b/config/searchy.php index ccbf005..06fceac 100755 --- a/config/searchy.php +++ b/config/searchy.php @@ -12,6 +12,10 @@ return [ 'class' => 'TomLingham\Searchy\SearchDrivers\FuzzySearchDriver', ], + 'ufuzzy' => [ + 'class' => 'TomLingham\Searchy\SearchDrivers\FuzzySearchUnicodeDriver', + ], + 'simple' => [ 'class' => 'TomLingham\Searchy\SearchDrivers\SimpleSearchDriver', ], diff --git a/src/Matchers/AcronymUnicodeMatcher.php b/src/Matchers/AcronymUnicodeMatcher.php new file mode 100644 index 0000000..94d7a14 --- /dev/null +++ b/src/Matchers/AcronymUnicodeMatcher.php @@ -0,0 +1,31 @@ +formatSearchString($rawString); + + return "IF( REPLACE($column, '\.', '') {$this->operator} '$searchString', ROUND({$this->multiplier} * ( CHAR_LENGTH( '$rawString' ) / CHAR_LENGTH( REPLACE($column, ' ', '') ))), 0)"; + } +} diff --git a/src/Matchers/StudlyCaseUnicodeMatcher.php b/src/Matchers/StudlyCaseUnicodeMatcher.php new file mode 100644 index 0000000..e8444ec --- /dev/null +++ b/src/Matchers/StudlyCaseUnicodeMatcher.php @@ -0,0 +1,36 @@ +operator} '{$this->formatSearchString($searchString)}', {$this->multiplier}, 0)"; + } +} diff --git a/src/SearchDrivers/FuzzySearchUnicodeDriver.php b/src/SearchDrivers/FuzzySearchUnicodeDriver.php new file mode 100644 index 0000000..d3a3b41 --- /dev/null +++ b/src/SearchDrivers/FuzzySearchUnicodeDriver.php @@ -0,0 +1,20 @@ + 100, + \TomLingham\Searchy\Matchers\StartOfStringMatcher::class => 50, + \TomLingham\Searchy\Matchers\AcronymUnicodeMatcher::class => 42, + \TomLingham\Searchy\Matchers\ConsecutiveCharactersUnicodeMatcher::class => 40, + \TomLingham\Searchy\Matchers\StartOfWordsMatcher::class => 35, + \TomLingham\Searchy\Matchers\StudlyCaseUnicodeMatcher::class => 32, + \TomLingham\Searchy\Matchers\InStringMatcher::class => 30, + \TomLingham\Searchy\Matchers\TimesInStringMatcher::class => 8, + ]; +}