그누보드 통합검색 또는 검색 사용시

그누보드 통합검색 또는 검색 사용시

QA

그누보드 통합검색 또는 검색 사용시

본문

sir에서는 통합검색시 검색 단어나 띄어쓰기 상관없이 검색이 되는데..

혹시 검색 단어수 제한 푸는 방법 있을까요?

연구 자료를 운영하는 홈페이지 운영중이라 검색은 필수인데.. 방법이 없네요.

 

예를 들어 

'건축 설계 주택 천장' 이런식으로 4개에 해당 되는 단어가 전부 검색되도록..

기본으로 2개까지는 되는데 그 3개가 되면 아래와 같이 뜨네요..

 

2106225191_1701838195.6046.png 

 

if (cnt > 1) {

alert("빠른 검색을 위하여 검색어에 공백은 한개까지만 입력할 수 있습니다.");

f.stx.select();

f.stx.focus();

return false;

}

 

이부분의 숫자를 바꿔주기도 해봤는데.. 그러면 공백 상관없이 통합검색까지는 되는데.. 실제 검색 결과에는 단어 2개만 적용이 되네요..

2106225191_1701838473.2644.png

어떻게 해야 sir같이 여러 단어 검색이 되도록 할수 있을까요?

 

이 질문에 댓글 쓰기 :

답변 3

하나이니 두개만 검색하겠지요 공백을 2로하면은 3개지요 , 3으로 3개의공백이 생기니 .가가 나나 다다 라라  4개의 공백 검색하겟다라는거겟지요..;;;---;; 결론은 3으로 정해보세요 ;;;

if (cnt > 1) {

alert("빠른 검색을 위하여 검색어에 공백은 한개까지만 입력할 수 있습니다.");

f.stx.select();

f.stx.focus();

return false;

}

 

관련 부분 찾아 보니
bbs/search.php 파일 에서 수정을 해줘야할듯합니다.

        // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
        for ($k=0; $k<count($field); $k++) {
            $str .= $op2;
            switch ($field[$k]) {
                case 'mb_id' :
                case 'wr_name' :
                    $str .= "$field[$k] = '$s[$i]'";
                    break;
                case 'wr_subject' :
                case 'wr_content' :
                    if (preg_match("/[a-zA-Z]/", $search_str))
                        $str .= "INSTR(LOWER({$field[$k]}), LOWER('{$search_str}'))";
                    else
                        $str .= "INSTR({$field[$k]}, '{$search_str}')";
                    break;
                default :
                    $str .= "1=0"; // 항상 거짓
                    break;
            }
            $op2 = " or ";
        }


이부분이 2개의 필드만 검색하도록 정의 되어있습니다.  or로 추가될수 있도록 수정해 주시기 바랍니다.

검색 패턴을 어떻게 설정하시는 것인지를 알아야 합니다.

 

띄워쓰기 구분으로 여러 단어를 검색하도록 허용할지 아니면 자동완성 기능으로 색인을 통해 여러 단어를 검색하도록 허용할지에 대해서 알아야 답변이 가능합니다.

 

만약, 띄워쓰기로 검색이 가능하게 하시려면 아래 개발단을 참고해보세요.


$que='';
$sql_query.=' and (';
$keyword_arr=explode(' ',$_POST['keyword']);
 
foreach($keyword_arr as $k => $v) {
   if(!empty($que)) $que.=" or ";
      $que.=" DB명 LIKE '$v'";
   }
}
$sql_query.=$que.")";
 
$query=" select Column명 from DB명 where 1$sql_query"
$rlt = sql_fetch_arry($query);
foreach($rlt as $dat) {
    print($dat." <br />");
}

 

위의 코드의 리뷰를 해드리자면 $_POST['keyword']로 받아오는 문자열들을 빈 공백 기준으로 분리하여 배열형태로 $keyword_arr 변수에 할당하고 그 배열을 foreach로 구분하고 key와 value값을 리벌링하여 할당합니다.

그런다음 foreach 안의 $que 변수에 값이 있으면 그 안에 코드를 수행하여 $que에 할당합니다.

그렇게 문자열이 추가된 que르 최종적으로  and( 와 ) 사이에 넣어 $sql_query에 담아 그 아래의 쿼리 영역에 넣어 resulting 합니다.

 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 123,847 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT