diff options
author | martian <martian@ampache> | 2010-02-13 18:34:06 +0000 |
---|---|---|
committer | martian <martian@ampache> | 2010-02-13 18:34:06 +0000 |
commit | 704e66d0b489a7d3b0d4dcedc79515e5300732ff (patch) | |
tree | d0d3a15349d0b24bafceace680c7b642d7feec97 | |
parent | 6c7d0fffebc5f3187f0fb97d51a60d6699bc93fc (diff) | |
download | ampache-704e66d0b489a7d3b0d4dcedc79515e5300732ff.tar.gz ampache-704e66d0b489a7d3b0d4dcedc79515e5300732ff.tar.bz2 ampache-704e66d0b489a7d3b0d4dcedc79515e5300732ff.zip |
switched to boolean mode fulltext search with conditional fuzzyness
-rw-r--r-- | lib/search.php | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/lib/search.php b/lib/search.php index f2548e0e..11c31877 100644 --- a/lib/search.php +++ b/lib/search.php @@ -119,17 +119,33 @@ function search_song($data,$operator,$method,$limit) { switch ($type) { case 'all': - $where_sql = " MATCH (`artist2`.`name`) AGAINST ('$value') OR `artist2`.`name` SOUNDS LIKE '$value' OR"; - $where_sql.= " MATCH (`album2`.`name`) AGAINST ('$value') OR `album2`.`name` SOUNDS LIKE '$value' OR"; - $where_sql.= " MATCH (`song`.`title`) AGAINST ('$value') OR `song`.`title` SOUNDS LIKE '$value'"; + $additional_soundex = false; + + if (!(strpos($value, '-'))) // if we want a fuzzier search + $additional_soundex = true; + + $where_sql = " MATCH (`artist2`.`name`, `album2`.`name`, `song`.`title`) AGAINST ('$value' IN BOOLEAN MODE)"; + + if ($additional_soundex) { + $where_sql.= " OR `artist2`.`name` SOUNDS LIKE '$value'"; + $where_sql.= " OR `album2`.`name` SOUNDS LIKE '$value'"; + $where_sql.= " OR `song`.`title` SOUNDS LIKE '$value'"; + } $table_sql = " LEFT JOIN `album` as `album2` ON `song`.`album`=`album2`.`id`"; $table_sql.= " LEFT JOIN `artist` AS `artist2` ON `song`.`artist`=`artist2`.`id`"; $order_sql = " ORDER BY"; - $order_sql.= " MATCH (`artist2`.`name`) AGAINST ('$value') + (SOUNDEX(`artist2`.`name`)=SOUNDEX('$value')) DESC,"; - $order_sql.= " MATCH (`album2`.`name`) AGAINST ('$value') + (SOUNDEX(`album2`.`name`)=SOUNDEX('$value')) DESC,"; - $order_sql.= " MATCH (`song`.`title`) AGAINST ('$value') + (SOUNDEX(`song`.`title`)=SOUNDEX('$value')) DESC,"; + + $order_sql.= " MATCH (`artist2`.`name`) AGAINST ('$value' IN BOOLEAN MODE)"; + if ($additional_soundex) $order_sql.= " + (SOUNDEX(`artist2`.`name`)=SOUNDEX('$value')) DESC,"; else $order_sql.= " DESC,"; + + $order_sql.= " MATCH (`album2`.`name`) AGAINST ('$value' IN BOOLEAN MODE)"; + if ($additional_soundex) $order_sql.= " + (SOUNDEX(`album2`.`name`)=SOUNDEX('$value')) DESC,"; else $order_sql.= " DESC,"; + + $order_sql.= " MATCH (`song`.`title`) AGAINST ('$value' IN BOOLEAN MODE)"; + if ($additional_soundex) $order_sql.= " + (SOUNDEX(`song`.`title`)=SOUNDEX('$value')) DESC,"; else $order_sql.= " DESC,"; + $order_sql.= " `artist2`.`name`,"; $order_sql.= " `album2`.`name`,"; $order_sql.= " `song`.`track`,"; |