Tylko słowa i operatory mają znaczenie w trybie wyszukiwania logicznego. Operatory to:+
, -
, > < ,
( )
, ~
, *
, "
, @odległość
. Po kilku poszukiwaniach odkryłem, jakie są znaki słowne:wielkie litery, małe litery, cyfra (cyfra) i _
. Myślę, że możesz użyć jednego z dwóch podejść:
-
Zamień wszystkie znaki niebędące słowami na spacje (wolę to podejście). Można to osiągnąć za pomocą wyrażenia regularnego:
$search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword);
-
Zastąp operatory znaków spacjami:
$search = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $keyword);
Tylko słowa są indeksowane przez wyszukiwarkę pełnotekstową i mogą być przeszukiwane. Znaki niebędące słowami nie są indeksowane, więc nie ma sensu zostawiać ich w wyszukiwanym ciągu.
Referencje:
- Wyszukiwanie pełnego tekstu logicznego
- Dostrajanie wyszukiwania pełnotekstowego MySQL (patrz:„Modyfikacje zestawu znaków”)
- PHP:preg_replace
- PHP:właściwości znaków Unicode
- PHP:możliwe modyfikatory we wzorcach regex