mirror of
https://github.com/YGGverse/YGGo.git
synced 2025-03-13 05:41:02 +00:00
update Filter::searchQuery method
This commit is contained in:
parent
2ef9948342
commit
3d6bc54b66
@ -79,34 +79,52 @@ class Filter {
|
||||
|
||||
static public function searchQuery(string $query, string $mode = 'default') {
|
||||
|
||||
// Prepare user-friendly search request (default mode)
|
||||
// https://sphinxsearch.com/docs/current.html#extended-syntax
|
||||
if ($mode == 'default') {
|
||||
|
||||
// Remove single char words
|
||||
$words = [];
|
||||
foreach ((array) explode(' ', $query) as $word) {
|
||||
// Remove extra separators
|
||||
$query = preg_replace('/[\s]+/', ' ', $query);
|
||||
|
||||
if (mb_strlen($word) > 1) {
|
||||
$words[] = $word;
|
||||
}
|
||||
$query = trim($query);
|
||||
|
||||
// Remove single char words
|
||||
$words = [];
|
||||
foreach ((array) explode(' ', $query) as $word) {
|
||||
|
||||
if (mb_strlen($word) > 1) {
|
||||
$words[] = $word;
|
||||
}
|
||||
}
|
||||
|
||||
if ($words) {
|
||||
$query = implode(' ', $words);
|
||||
}
|
||||
if ($words) {
|
||||
$query = implode(' ', $words);
|
||||
}
|
||||
|
||||
// Remove SphinxQL special chars
|
||||
$query = str_replace(['\\', '/', '~', '@', '!', '"', '(', ')'], ['\\\\', '\/', '\~', '\@', '\!', '\"', '\(', '\)'], $query);
|
||||
// Quote reserved keyword operators
|
||||
$operators = [
|
||||
'MAYBE',
|
||||
'AND',
|
||||
'OR',
|
||||
'NOT',
|
||||
'SENTENCE',
|
||||
'NEAR',
|
||||
'ZONE',
|
||||
'ZONESPAN',
|
||||
'PARAGRAPH',
|
||||
|
||||
// Replace query separators to the MAYBE operator
|
||||
$query = str_ireplace(['MAYBE'], ['__MAYBE__'], $query);
|
||||
$query = preg_replace('/[\W\s]+/ui', '__SEPARATOR__', $query);
|
||||
$query = trim($query, '__SEPARATOR__');
|
||||
$query = str_ireplace(['__SEPARATOR__', '__MAYBE__'], [' MAYBE ', ' \MAYBE '], $query);
|
||||
'\\', '/', '~', '@', '!', '"', '(', ')', '|', '?', '%', '-', '>', '<', ':', ';'
|
||||
];
|
||||
|
||||
foreach ($operators as $operator) {
|
||||
$query = str_ireplace($operator, '\\' . $operator, $query);
|
||||
}
|
||||
}
|
||||
|
||||
$query = trim($query);
|
||||
// Apply query semantics
|
||||
$query = str_replace(' ', ' | ', $query);
|
||||
|
||||
return $query;
|
||||
return trim($query);
|
||||
}
|
||||
|
||||
static public function plural(int $number, array $texts) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user