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