2011-08-27 2 views
5

내 웹 응용 프로그램에는 여러 사용자가 있습니다. 자신의 콘텐츠를 내 webapp에 업로드했습니다. 업로드하는 각 콘텐츠에는 제목, 설명 및 태그 (키워드)가 있습니다. 콘텐츠 또는 사용자 이름을 검색하는 검색 스크립트를 작성할 수 있습니다. 그러나 철자법 실수로 주어진 키워드는 결과를 반환하지 않습니다. 예를 들어 데이터베이스에 "Michael"이라는 사용자가 있고 검색어가 "Micheal"인 경우 검색 제안 이외의 다른 검색어 인 'Michael'을 검색 했습니까?PHP MySQL 검색 제안

또한이 제안은 사용자가 업로드 한 콘텐츠에 대한 제안이어야합니다. 사용자는 자신의 콘텐츠 제목을 "Michael 's activities May 2011"로 유지할 수 있으며 개별 단어에 대한 제안이 생성되어야합니다.

답변

8

당신이 경우 마틴 Hohenberg 제안 Soundex 이외의 알고리즘을 사용해야합니다, 당신은 예를 들어, sound_equivalent라는 여분의 열을 테이블에 추가해야합니다. (실제로이 열을 인덱싱 할 수 있으므로 더 효율적인 솔루션입니다.) 요청은 다음과 같다 :

SELECT * FROM users WHERE sound_equivalent = :input_sound_equivalent 

sound_equivalent 열의 내용은 다음 PHP 알고리즘으로 생성, 및 사용자 파라미터의 나머지 부분 표에 삽입 될 수있다.

+2

해당 언어의 발음에 맞는 soundex 스타일의 알고리즘을 사용하십시오. 예를 들어 독일어의 경우 Soundex는 덜 유용하며 Kölner Phonetik (MYSQL에 포함되지 않음)으로 대체해야합니다. – ty812

0

아마도 가장 일반적인 단어 (예 : 개, 집, 도시, 수, 물, 인터넷)의 데이터베이스를 만들 수 있습니다. 그것을 크게 만들 필요가 없습니다 (< 10000 단어). 그런 다음 검색어가 폭발 할 때 "단어"데이터베이스에서 검색어와 같은 단어를 확인하십시오. 그런 다음 제안 사항을 반복하십시오.

SELECT * FROM users WHERE SOUNDEX(name) = SOUNDEX(:input) 

또는

SELECT * FROM users WHERE name SOUNDS_LIKE :input 

같은

(완전히 동등하다)

편집 : 당신은 그런 비슷한 소리가 나는 이름을 검색 SOUNDEX를 사용할 수

2

검색 결과가없는 경우 PHP 라이브러리 pspell을 사용하여 제안을 얻을 수도 있습니다.