Browse Source

update Filter::searchQuery method

main
ghost 1 year ago
parent
commit
3d6bc54b66
  1. 36
      library/filter.php

36
library/filter.php

@ -79,8 +79,15 @@ class Filter {
static public function searchQuery(string $query, string $mode = 'default') { 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') { if ($mode == 'default') {
// Remove extra separators
$query = preg_replace('/[\s]+/', ' ', $query);
$query = trim($query);
// Remove single char words // Remove single char words
$words = []; $words = [];
foreach ((array) explode(' ', $query) as $word) { foreach ((array) explode(' ', $query) as $word) {
@ -94,19 +101,30 @@ class Filter {
$query = implode(' ', $words); $query = implode(' ', $words);
} }
// Remove SphinxQL special chars // Quote reserved keyword operators
$query = str_replace(['\\', '/', '~', '@', '!', '"', '(', ')'], ['\\\\', '\/', '\~', '\@', '\!', '\"', '\(', '\)'], $query); $operators = [
'MAYBE',
'AND',
'OR',
'NOT',
'SENTENCE',
'NEAR',
'ZONE',
'ZONESPAN',
'PARAGRAPH',
'\\', '/', '~', '@', '!', '"', '(', ')', '|', '?', '%', '-', '>', '<', ':', ';'
];
// Replace query separators to the MAYBE operator foreach ($operators as $operator) {
$query = str_ireplace(['MAYBE'], ['__MAYBE__'], $query); $query = str_ireplace($operator, '\\' . $operator, $query);
$query = preg_replace('/[\W\s]+/ui', '__SEPARATOR__', $query); }
$query = trim($query, '__SEPARATOR__');
$query = str_ireplace(['__SEPARATOR__', '__MAYBE__'], [' MAYBE ', ' \MAYBE '], $query);
} }
$query = trim($query); // Apply query semantics
$query = str_replace(' ', ' | ', $query);
return $query; return trim($query);
} }
static public function plural(int $number, array $texts) { static public function plural(int $number, array $texts) {

Loading…
Cancel
Save