2010-05-01 2 views
1

검색 양식에 'good'을 입력하면 'good'이라는 키워드가 포함 된 모든 결과가 표시됩니다. 그러나 사용자가 '좋은 가장 좋은'형식을 입력하면 두 단어가 함께 나타나는 레코드가 없기 때문에 결과가 표시되지 않습니다. 하지만 다른 장소에있는 항목에 나타납니다.검색 결과가 두 개 이상의 단어로 표시되는 경우

예를 들어, 기록은 말한다 :

좋은 행동이 계속 남아있는 저장하고 순수한 수율이 '좋은', 그것은이 표시됩니다에

사용자 유형입니다 그러나 사용자가 '좋은'+ '순수한'을 입력하면 아무 것도 표시되지 않습니다. 또는 레코드에 'good-deeds'라는 키워드가 포함되어 있고 사용자가 하이픈없이 'gooddeeds'를 입력하면 아무 것도 표시되지 않습니다.

사용자가 '좋은'+ '순수한'또는 '좋은 행위'를 입력하면 강조 표시된 키워드가 포함 된 레코드 여야합니다.

search.php 코드 :

$search_result = ""; 

$search_result = $_POST["q"]; 

$search_result = trim($search_result); 

//Check if the string is empty 
if ($search_result == "") { 
    echo "<p class='error'>Search Error. Please Enter Your Search Query.</p>" ; 
    exit(); 
     } 

if ($search_result == "%" || $search_result == "_" || $search_result == "+") { 
    echo "<p class='error1'>Search Error. Please Enter a Valid Search Query.</p>" ; 
    exit(); 
     } 

$result = mysql_query('SELECT cQuotes, vAuthor, cArabic, vReference FROM thquotes WHERE cQuotes LIKE "%' . mysql_real_escape_string($search_result) .'%" ORDER BY idQuotes DESC', $conn) 
    or die ('Error: '.mysql_error()); 


function h($s) { 
    echo htmlspecialchars($s, ENT_QUOTES); 
} 

function highlightWords($string, $word) 
{ 

    $string = preg_replace("/".preg_quote($word, "/")."/i", "<span class='highlight'>$0</span>", $string); 
    /*** return the highlighted string ***/ 
    return $string; 

} 

?> 

<div class="caption">Search Results</div> 
<div class="center_div"> 
<table> 
    <?php while ($row= mysql_fetch_array($result, MYSQL_ASSOC)) { 
     $cQuote = highlightWords(htmlspecialchars($row['cQuotes']), $search_result); 
     ?> 
     <tr> 
     <td style="text-align:right; font-size:18px;"><?php h($row['cArabic']); ?></td> 
      <td style="font-size:16px;"><?php echo $cQuote; ?></td> 
      <td style="font-size:12px;"><?php h($row['vAuthor']); ?></td> 
      <td style="font-size:12px; font-style:italic; text-align:right;"><?php h($row['vReference']); ?></td> 
     </tr> 
    <?php } ?> 
</table> 
</div> 

search.html에가 :

<form name="myform" class="wrapper"> 
     <input type="text" name="q" onkeyup="showUser()" class="txt_search"/> 
     <input type="button" name="button" onclick="showUser()" class="button"/> 
     <p> 
     <div id="txtHint"></div> 
    </form> 

답변

2

full-text searching라고 당신이 원하는. 간단히 말하면, 전체 텍스트 검색은 기본적으로 각 단어를 독자적으로 검색합니다.

+0

내 테이블 유형이 INNODB입니다. 불행히도 FULLTEXT를 지원하지 않는다고합니다. – input

+0

그 경우, 문제 해결을 위해 http://stackoverflow.com/questions/1381186/fulltext-search-with-innodb를 살펴 보시기 바랍니다. 해당 게시물에서 제안한 것과 같은 전용 검색 엔진을 사용할 수 없다면, InnoDB 데이터를 MyISAM 테이블에 복제하고 테이블에서 검색하거나 수동으로 솔루션을 롤링하는 등의 다른 작업을 수행 할 수 있습니다 가브리엘 (Gabriel)이 제안한 것처럼 콘텐츠를 분할하고 단어를 올바른 게시물에 연결합니다. –

+0

답변 해 주셔서 감사합니다. php 대안으로 나아 가기로 결정했습니다. http://www.acuras.co.uk/articles/2-php-multi-word-mysql-search-algorithm-and-output – input

1

이러한 종류의 검색을 활용하려면 콘텐츠 색인을 구현해야합니다. 색인을 검색하고 연결된 콘텐츠를 반환 할 때이 단어를 콘텐츠 구성 요소 (예 : 거기에있는 레코드)와 연결하는 관계형 테이블 개수에 따라 관련성을 변경하고, 색인을 생성 할 필드를 추가 할 수 있습니다. http://www.databasejournal.com/sqletc/article.php/1578331/Using-Fulltext-Indexes-in-MySQL---Part-1.htm 이것은 좋은 시작일 수 있습니다.

+0

위의 내용을 참조하십시오. 내 테이블 유형은 INNODB입니다. INNODB에서 FULLTEXT를 사용하기위한 해결 방법이 있습니까? – input

+0

대부분의 사용자가이 문제를 해결하기 위해 보조 ISAM 테이블을 만들고있는 것처럼 보입니다. INNODB의 내용을 읽고 ISAM에서 인덱스를 생성하여 검색을 수행 할 수 있습니다. 결과가 아니라 키로 INNODB에 대한 쿼리. – Gabriel

0

귀하의 사이트에 대해 올바르게 검색 엔진을 사용하는 것이 가장 힘든 일 중 하나입니다. 나는 google에 나의 위치를 ​​위로 서명하고 Google 색인 그것을 permited. 페이지 출력을 사용자 정의하고 해당 모양을 사이트에 통합 할 수 있습니다.

유일한 증거는 "Google"브랜드 검색 버튼이지만 솔직히 말해서 지금은 제거 할 수 있다고 생각합니다.

관련 문제