2008-11-14 11 views
5

Podczas korzystania z wyszukiwania pełnotekstowego MySQL w trybie boolowskim występują pewne znaki, takie jak + i -, które są używane jako operatory. Jeśli szukam czegoś takiego jak "C++", interpretuje on + jako operator. Jaka jest najlepsza praktyka radzenia sobie z tymi specjalnymi postaciami?Obsługa znaków pełnotekstowych MySQL

Obecna metoda, której używam, polega na zamianie wszystkich + znaków w danych na _plus. Konwertuje również znaki &, @,/i # do reprezentacji tekstowej.

Odpowiedz

4

Nie ma sposobu, aby to zrobić ładnie przy użyciu wyszukiwania pełnotekstowego MySQL. To, co robisz (zastępując znaki specjalne wstępnie zdefiniowanym ciągiem znaków) jest jedynym sposobem, aby to zrobić.

Możesz rozważyć użycie zamiast tego Sphinx Search. Najwyraźniej obsługuje unikanie znaków specjalnych, a wszystkie raporty są znacznie szybsze niż domyślne wyszukiwanie pełnotekstowe.

3

MySQL jest dość brutalny w tym, jakie tokeny ignoruje podczas budowania pełnotekstowych indeksów. Powiedziałbym, że tam, gdzie napotkałby termin "C++", prawdopodobnie rozebrałoby znaki plus, pozostawiając tylko C, a następnie zignorowało to, ponieważ jest zbyt krótkie. Prawdopodobnie możesz skonfigurować MySQL tak, aby zawierał jednoliterowe słowa, ale nie jest zoptymalizowany pod kątem tego, i wątpię, byś mógł uzyskać to, by traktować plusowe postacie, jak chcesz.

Jeśli potrzebujesz dobrej wewnętrznej wyszukiwarki, w której możesz skonfigurować takie funkcje, sprawdź kod Lucene, który został przeniesiony do różnych języków including PHP (in the Zend framework).

Jeśli potrzebujesz tego więcej do "tagowania" niż wyszukiwania tekstowego, może być bardziej odpowiednie coś innego.

Powiązane problemy