Commit 444c5e16 authored by Gábor Hojtsy's avatar Gábor Hojtsy
Browse files

#205920 by douggreen: short term searches were returning wrong results

parent b571a82e
...@@ -778,8 +778,8 @@ function search_parse_query($text) { ...@@ -778,8 +778,8 @@ function search_parse_query($text) {
$queryor = array(); $queryor = array();
$any = FALSE; $any = FALSE;
foreach ($key as $or) { foreach ($key as $or) {
list($q, $count) = _search_parse_query($or, $arguments2); list($q, $num_new_scores) = _search_parse_query($or, $arguments2);
$any |= $count; $any |= $num_new_scores;
if ($q) { if ($q) {
$queryor[] = $q; $queryor[] = $q;
$arguments[] = $or; $arguments[] = $or;
...@@ -794,12 +794,15 @@ function search_parse_query($text) { ...@@ -794,12 +794,15 @@ function search_parse_query($text) {
// Single ANDed term // Single ANDed term
else { else {
$simple_and = TRUE; $simple_and = TRUE;
list($q, $count) = _search_parse_query($key, $arguments2); list($q, $num_new_scores, $num_valid_words) = _search_parse_query($key, $arguments2);
if ($q) { if ($q) {
$query[] = $q; $query[] = $q;
$arguments[] = $key; $arguments[] = $key;
if (!$num_valid_words) {
$simple = FALSE;
}
// Each AND keyword needs to match at least once // Each AND keyword needs to match at least once
$matches += $count; $matches += $num_new_scores;
} }
} }
} }
...@@ -827,7 +830,8 @@ function search_parse_query($text) { ...@@ -827,7 +830,8 @@ function search_parse_query($text) {
* Helper function for search_parse_query(); * Helper function for search_parse_query();
*/ */
function _search_parse_query(&$word, &$scores, $not = FALSE) { function _search_parse_query(&$word, &$scores, $not = FALSE) {
$count = 0; $num_new_scores = 0;
$num_valid_words = 0;
// Determine the scorewords of this word/phrase // Determine the scorewords of this word/phrase
if (!$not) { if (!$not) {
$split = explode(' ', $word); $split = explode(' ', $word);
...@@ -837,13 +841,14 @@ function _search_parse_query(&$word, &$scores, $not = FALSE) { ...@@ -837,13 +841,14 @@ function _search_parse_query(&$word, &$scores, $not = FALSE) {
$s = $num ? ((int)ltrim($s, '-0')) : $s; $s = $num ? ((int)ltrim($s, '-0')) : $s;
if (!isset($scores[$s])) { if (!isset($scores[$s])) {
$scores[$s] = $s; $scores[$s] = $s;
$count++; $num_new_scores++;
} }
$num_valid_words++;
} }
} }
} }
// Return matching snippet and number of added words // Return matching snippet and number of added words
return array("d.data ". ($not ? 'NOT ' : '') ."LIKE '%% %s %%'", $count); return array("d.data ". ($not ? 'NOT ' : '') ."LIKE '%% %s %%'", $num_new_scores, $num_valid_words);
} }
/** /**
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment