summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGábor Hojtsy <gabor@hojtsy.hu>2008-01-07 12:57:38 +0000
committerGábor Hojtsy <gabor@hojtsy.hu>2008-01-07 12:57:38 +0000
commit444c5e16be471c03e1c4248a155b8308c792abbd (patch)
tree60239f3c1a992271dfec6a7cb369d1e0ad8b7067
parentb571a82e4ed9c8b3b6003fb2ff3816ae43f057c7 (diff)
downloadbrdo-444c5e16be471c03e1c4248a155b8308c792abbd.tar.gz
brdo-444c5e16be471c03e1c4248a155b8308c792abbd.tar.bz2
#205920 by douggreen: short term searches were returning wrong results
-rw-r--r--modules/search/search.module19
1 files changed, 12 insertions, 7 deletions
diff --git a/modules/search/search.module b/modules/search/search.module
index cff5a9872..335aafbf2 100644
--- a/modules/search/search.module
+++ b/modules/search/search.module
@@ -778,8 +778,8 @@ function search_parse_query($text) {
$queryor = array();
$any = FALSE;
foreach ($key as $or) {
- list($q, $count) = _search_parse_query($or, $arguments2);
- $any |= $count;
+ list($q, $num_new_scores) = _search_parse_query($or, $arguments2);
+ $any |= $num_new_scores;
if ($q) {
$queryor[] = $q;
$arguments[] = $or;
@@ -794,12 +794,15 @@ function search_parse_query($text) {
// Single ANDed term
else {
$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) {
$query[] = $q;
$arguments[] = $key;
+ if (!$num_valid_words) {
+ $simple = FALSE;
+ }
// Each AND keyword needs to match at least once
- $matches += $count;
+ $matches += $num_new_scores;
}
}
}
@@ -827,7 +830,8 @@ function search_parse_query($text) {
* Helper function for search_parse_query();
*/
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
if (!$not) {
$split = explode(' ', $word);
@@ -837,13 +841,14 @@ function _search_parse_query(&$word, &$scores, $not = FALSE) {
$s = $num ? ((int)ltrim($s, '-0')) : $s;
if (!isset($scores[$s])) {
$scores[$s] = $s;
- $count++;
+ $num_new_scores++;
}
+ $num_valid_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);
}
/**