테스트 사이트 - 개발 중인 베타 버전입니다

mysql 태그빼고 검색하려하니 속도가 너무 느려졌어요 채택완료

한상차림 5년 전 조회 4,125

내용에서 태그를 제거하고 검색을 하고 싶어서

mysql 에서

CREATE FUNCTION `strip_tags`($str text) RETURNS text
BEGIN
    DECLARE $start, $end INT DEFAULT 1;
    LOOP
        SET $start = LOCATE("<", $str, $start);
        IF (!$start) THEN RETURN $str; END IF;
        SET $end = LOCATE(">", $str, $start);
        IF (!$end) THEN SET $end = $start; END IF;
        SET $str = INSERT($str, $start, $end - $start + 1, "");
    END LOOP;
END;

strip_tags 함수를 만든 뒤에

bbs/search.php 에서

 

 if (preg_match("/[a-zA-Z]/", $search_str))

                        $str .= "INSTR(LOWER({$field[$k]}), LOWER('{$search_str}'))";

                    else

                        $str .= "INSTR({$field[$k]}), '{$search_str}')";

                    break;

부분을

                    if (preg_match("/[a-zA-Z]/", $search_str))

                        $str .= "INSTR(LOWER(strip_tags({$field[$k]})), LOWER('{$search_str}'))";

                    else

                        $str .= "INSTR(strip_tags({$field[$k]}), '{$search_str}')";

                    break;

 

으로 수정해주었습니다.

그랬더니 검색속도가 눈에 띄게 느려졌는데 보다 빠르게 검색할 수 있는 방법은 없을까요?ㅠㅠ

알려주시면 정말 감사하겠습니다. 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
5년 전

없을 것 같습니다.

 

동일한 데이터 타입의 칼럼을 하나 더 만든 뒤,

저장시에 태그제거한 내용을 해당 칼럼에 저장하여.. 해당 칼럼으로 검색하는 방법은 있을 듯 합니다.

ex. wr_content2 칼럼 생성 -> slf : wr_content2

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

한상차림
5년 전
답변 감사합니다! 그러면 모든 게시판에 일일히 칼럼을 새로 추가해주고 기존에 썼던 게시물들은 태그 제거한 내용을 새로만든 칼럼에 하나씩 넣어주어야 하는걸까요??ㅠㅠ
마르스컴퍼니
5년 전
다시 생각해보니 여분필드를 이용하면 될 것 같습니다. ex. wr_7

1) 각 게시판 테이블의 wr_7 을 동일한 데이터 타입으로 변경 (만약 text 타입이라면 wr_7 도 text 타입으로 변경)

2) 기존 게시글들은 위 strip_tags 함수를 이용하여 update 하면 됩니다.

update g5_write_aaa
set wr_7 = strip_tags(wr_content)

3) 앞으로 저장되는 게시글들은 게시판 스킨 디렉토리의 write_update.skin.php 에서 처리

$sql = "
update $write_table
set wr_7 = strip_tags(wr_content)
";

sql_query($sql);
한상차림
5년 전
아 여분필드가 있었군요 내일 해봐야겠네요. 친절한 답변 감사합니다. ^^

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인