Search like google with + and -

Post about your customizations to share with others.

Moderators: Developer, Contributor

Post Reply
frentmeister
Posts: 33
Joined: 22 Jul 2005, 14:19

Search like google with + and -

Post by frentmeister »

In our software department we make some good changes, one of this change is search like google, with + and - for the search....

it is realy pretty to work with that: (Version 1.01)

// * Old Function *

Code: Select all

		$t_textsearch_where_clause = "((summary LIKE '%$c_search%')
							 OR ($t_bug_text_table.description LIKE '%$c_search%')
							 OR ($t_bug_text_table.steps_to_reproduce LIKE '%$c_search%')
							 OR ($t_bug_text_table.additional_information LIKE '%$c_search%')
							 OR ($t_bug_table.id = '$c_search_int'))";

			$t_textsearch_wherejoin_clause = "((summary LIKE '%$c_search%')
							 OR ($t_bug_text_table.description LIKE '%$c_search%')
							 OR ($t_bug_text_table.steps_to_reproduce LIKE '%$c_search%')
							 OR ($t_bug_text_table.additional_information LIKE '%$c_search%')
							 OR ($t_bug_table.id LIKE '%$c_search%')
							 OR ($t_bugnote_text_table.note LIKE '%$c_search%'))";
			*/


First found line 710 in /core/filter_api.php


// * New Function *

# Simple Text Search - Thanks to Alan Knowles

i

Code: Select all

f ( !is_blank( $t_filter['search'] ) ) {


			$c_search = db_prepare_string( $t_filter['search'] );
			$c_search_int = db_prepare_int( $t_filter['search'] );


			$t_textsearch_where_clause 		= "( MATCH (summary,$t_bug_text_table.description,$t_bug_text_table.steps_to_reproduce,$t_bug_text_table.additional_information) AGAINST ('$c_search' IN BOOLEAN MODE) OR $t_bug_table.id='$c_search_int'  )";
			$t_textsearch_wherejoin_clause 	= "( MATCH (summary,$t_bug_text_table.description,$t_bug_text_table.steps_to_reproduce,$t_bug_text_table.additional_information,$t_bugnote_text_table.note) AGAINST ('$c_search' IN BOOLEAN MODE) OR $t_bug_table.id LIKE '%$c_search%'  )";
an new Version comes tomorrow...but i hope that is ok...
Last edited by frentmeister on 03 Dec 2006, 20:20, edited 1 time in total.
frentmeister
Posts: 33
Joined: 22 Jul 2005, 14:19

Post by frentmeister »

New version....

/

Code: Select all

/ * New Searching *

			$x_searching = "(";

			for($i=0;$i<count($split_str);$i++) {

				$wort_neu = "";
				$wort = trim($split_str[$i]);


				if(substr($wort,0,1) == "+") {

					if($i>0) $wort_neu = "AND";

					$wort 		= str_replace("+","",$wort);
					$wort_neu 	.= " (summary LIKE '%".$wort."%' OR $t_bug_text_table.description LIKE '%".$wort."%' OR $t_bug_text_table.steps_to_reproduce LIKE '%".$wort."%' OR $t_bug_text_table.additional_information LIKE '%".$wort."%') ";
				}
				elseif(substr($wort,0,1) == "-") {

					if($i>0) $wort_neu = "AND";

					$wort 		= str_replace("-","",$wort);
					$wort_neu 	.= " (summary NOT LIKE '%".$wort."%' AND $t_bug_text_table.description NOT LIKE '%".$wort."%' AND $t_bug_text_table.steps_to_reproduce NOT LIKE '%".$wort."%' AND $t_bug_text_table.additional_information NOT LIKE '%".$wort."%') ";
				}
				else {

					if($i>0) $wort_neu = "OR";
					$wort_neu 	.= " (summary LIKE '%".$wort."%' OR $t_bug_text_table.description LIKE '%".$wort."%' OR $t_bug_text_table.steps_to_reproduce LIKE '%".$wort."%' OR $t_bug_text_table.additional_information LIKE '%".$wort."%') ";
				}

				$x_searching .= $wort_neu;
			}

			$x_searching .= ")";




			// * Bug Table ID *
			$x_bug_table_id = "($t_bug_table.id LIKE $c_search_int)";





			// * Bug Note *

			$x_note = "(";

			for($i=0;$i<count($split_str);$i++) {

				$wort_neu = "";
				$wort = trim($split_str[$i]);


				if(substr($wort,0,1) == "+") {

					if($i>0) $wort_neu = "AND";

					$wort 		= str_replace("+","",$wort);
					$wort_neu 	.= " $t_bugnote_text_table.note LIKE '%".$wort."%' ";
				}
				elseif(substr($wort,0,1) == "-") {

					if($i>0) $wort_neu = "AND";

					$wort 		= str_replace("-","",$wort);
					$wort_neu 	.= " $t_bugnote_text_table.note NOT LIKE '%".$wort."%' ";
				}
				else {

					if($i>0) $wort_neu = "OR";
					$wort_neu 	.= " $t_bugnote_text_table.note LIKE '%".$wort."%' ";
				}

				$x_note .= $wort_neu;
			}

			$x_note .= ")";





			$x = "(".$x_searching." OR ".$x_bug_table_id.")";
			$x2 = "(".$x_searching." OR ".$x_bug_table_id." OR ".$x_note.")";



			$t_textsearch_where_clause 		= $x;
			$t_textsearch_wherejoin_clause 	= $x2;

		if ( !is_blank( $t_filter['search'] ) ) {


			$c_search = db_prepare_string( $t_filter['search'] );
			$c_search_int = db_prepare_int( $t_filter['search'] );


			$t_textsearch_where_clause 		= "( MATCH (summary,$t_bug_text_table.description,$t_bug_text_table.steps_to_reproduce,$t_bug_text_table.additional_information) AGAINST ('$c_search' IN BOOLEAN MODE) OR $t_bug_table.id='$c_search_int'  )";
			$t_textsearch_wherejoin_clause 	= "( MATCH (summary,$t_bug_text_table.description,$t_bug_text_table.steps_to_reproduce,$t_bug_text_table.additional_information,$t_bugnote_text_table.note) AGAINST ('$c_search' IN BOOLEAN MODE) OR $t_bug_table.id LIKE '%$c_search%'  )";

Post Reply