aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xphpBB/includes/search/fulltext_native.php19
1 files changed, 19 insertions, 0 deletions
diff --git a/phpBB/includes/search/fulltext_native.php b/phpBB/includes/search/fulltext_native.php
index 2c50c5f9fd..2593136f10 100755
--- a/phpBB/includes/search/fulltext_native.php
+++ b/phpBB/includes/search/fulltext_native.php
@@ -822,6 +822,9 @@ class fulltext_native extends search_backend
case 'mssql':
case 'mssql_odbc':
case 'sqlite':
+ // make sure the longest word comes first, so nothing will be truncated
+ usort($new_words, array(&$this, 'strlencmp'));
+
$sql = 'INSERT INTO ' . SEARCH_WORD_TABLE . ' (word_text) ' . implode(' UNION ALL ', preg_replace('#^(.*)$#', "SELECT '\$1'", $new_words));
$db->sql_query($sql);
break;
@@ -883,6 +886,22 @@ class fulltext_native extends search_backend
}
/**
+ * Used by index() to sort strings by string length, longest first
+ */
+ function strlencmp($a, $b)
+ {
+ $len_a = strlen($a);
+ $len_b = strlen($b);
+
+ if ($len_a == $len_b)
+ {
+ return 0;
+ }
+
+ return ($len_a > $len_b) ? -1 : 1;
+ }
+
+ /**
* Removes entries from the wordmatch table for the specified post_ids
*/
function index_remove($post_ids, $author_ids)