[feature/sphinx-fulltext-search] fix comments

PHPBB3-10946
This commit is contained in:
Dhruv Goel 2012-07-10 05:51:52 +05:30 committed by Dhruv
parent 537a16220e
commit fdb7e64e29
3 changed files with 53 additions and 39 deletions

View file

@ -116,7 +116,7 @@ class phpbb_search_fulltext_sphinx
return $error; return $error;
} }
// move delta to main index each hour // Move delta to main index each hour
set_config('search_gc', 3600); set_config('search_gc', 3600);
return false; return false;
@ -135,8 +135,9 @@ class phpbb_search_fulltext_sphinx
include ($phpbb_root_path . 'config.' . $phpEx); include ($phpbb_root_path . 'config.' . $phpEx);
// now that we're sure everything was entered correctly, generate a config for the index /* Now that we're sure everything was entered correctly,
// we misuse the avatar_salt for this, as it should be unique ;-) generate a config for the index. We misuse the avatar_salt
for this, as it should be unique. */
$config_object = new phpbb_search_sphinx_config($this->config['fulltext_sphinx_config_path'] . 'sphinx.conf'); $config_object = new phpbb_search_sphinx_config($this->config['fulltext_sphinx_config_path'] . 'sphinx.conf');
$config_data = array( $config_data = array(
@ -396,7 +397,7 @@ class phpbb_search_fulltext_sphinx
} }
} }
// most narrow filters first // Most narrow filters first
if ($topic_id) if ($topic_id)
{ {
$this->sphinx->SetFilter('topic_id', array($topic_id)); $this->sphinx->SetFilter('topic_id', array($topic_id));
@ -407,31 +408,37 @@ class phpbb_search_fulltext_sphinx
switch($fields) switch($fields)
{ {
case 'titleonly': case 'titleonly':
// only search the title // Only search the title
if ($terms == 'all') if ($terms == 'all')
{ {
$search_query_prefix = '@title '; $search_query_prefix = '@title ';
} }
$this->sphinx->SetFieldWeights(array("title" => 5, "data" => 1)); // weight for the title // Weight for the title
$this->sphinx->SetFilter('topic_first_post', array(1)); // 1 is first_post, 0 is not first post $this->sphinx->SetFieldWeights(array("title" => 5, "data" => 1));
// 1 is first_post, 0 is not first post
$this->sphinx->SetFilter('topic_first_post', array(1));
break; break;
case 'msgonly': case 'msgonly':
// only search the body // Only search the body
if ($terms == 'all') if ($terms == 'all')
{ {
$search_query_prefix = '@data '; $search_query_prefix = '@data ';
} }
$this->sphinx->SetFieldWeights(array("title" => 1, "data" => 5)); // weight for the body // Weight for the body
$this->sphinx->SetFieldWeights(array("title" => 1, "data" => 5));
break; break;
case 'firstpost': case 'firstpost':
$this->sphinx->SetFieldWeights(array("title" => 5, "data" => 1)); // more relative weight for the title, also search the body // More relative weight for the title, also search the body
$this->sphinx->SetFilter('topic_first_post', array(1)); // 1 is first_post, 0 is not first post $this->sphinx->SetFieldWeights(array("title" => 5, "data" => 1));
// 1 is first_post, 0 is not first post
$this->sphinx->SetFilter('topic_first_post', array(1));
break; break;
default: default:
$this->sphinx->SetFieldWeights(array("title" => 5, "data" => 1)); // more relative weight for the title, also search the body // More relative weight for the title, also search the body
$this->sphinx->SetFieldWeights(array("title" => 5, "data" => 1));
break; break;
} }
@ -458,7 +465,8 @@ class phpbb_search_fulltext_sphinx
$this->sphinx->SetLimits($start, (int) $per_page, SPHINX_MAX_MATCHES); $this->sphinx->SetLimits($start, (int) $per_page, SPHINX_MAX_MATCHES);
$result = $this->sphinx->Query($search_query_prefix . str_replace('"', '"', $this->search_query), $this->indexes); $result = $this->sphinx->Query($search_query_prefix . str_replace('"', '"', $this->search_query), $this->indexes);
// could be connection to localhost:3312 failed (errno=111, msg=Connection refused) during rotate, retry if so /* Could be connection to localhost:3312 failed (errno=111,
msg=Connection refused) during rotate, retry if so */
$retries = SPHINX_CONNECT_RETRIES; $retries = SPHINX_CONNECT_RETRIES;
while (!$result && (strpos($this->sphinx->_error, "errno=111,") !== false) && $retries--) while (!$result && (strpos($this->sphinx->_error, "errno=111,") !== false) && $retries--)
{ {

View file

@ -49,7 +49,7 @@ class phpbb_search_sphinx_config
{ {
for ($i = 0, $size = sizeof($this->sections); $i < $size; $i++) for ($i = 0, $size = sizeof($this->sections); $i < $size; $i++)
{ {
// make sure this is really a section object and not a comment // Make sure this is really a section object and not a comment
if (($this->sections[$i] instanceof phpbb_search_sphinx_config_section) && $this->sections[$i]->get_name() == $name) if (($this->sections[$i] instanceof phpbb_search_sphinx_config_section) && $this->sections[$i]->get_name() == $name)
{ {
return $this->sections[$i]; return $this->sections[$i];
@ -76,7 +76,7 @@ class phpbb_search_sphinx_config
*/ */
function read($filename) function read($filename)
{ {
// split the file into lines, we'll process it line by line // Split the file into lines, we'll process it line by line
$config_file = file($filename); $config_file = file($filename);
$this->sections = array(); $this->sections = array();
@ -87,8 +87,8 @@ class phpbb_search_sphinx_config
foreach ($config_file as $i => $line) foreach ($config_file as $i => $line)
{ {
// if the value of a variable continues to the next line because the line break was escaped /* If the value of a variable continues to the next line because the line
// then we don't trim leading space but treat it as a part of the value break was escaped then we don't trim leading space but treat it as a part of the value */
if ($in_value) if ($in_value)
{ {
$line = rtrim($line); $line = rtrim($line);
@ -98,11 +98,11 @@ class phpbb_search_sphinx_config
$line = trim($line); $line = trim($line);
} }
// if we're not inside a section look for one // If we're not inside a section look for one
if (!$section) if (!$section)
{ {
// add empty lines and comments as comment objects to the section list /* add empty lines and comments as comment objects to the section list
// that way they're not deleted when reassembling the file from the sections that way they're not deleted when reassembling the file from the sections*/
if (!$line || $line[0] == '#') if (!$line || $line[0] == '#')
{ {
$this->sections[] = new phpbb_search_sphinx_config_comment($config_file[$i]); $this->sections[] = new phpbb_search_sphinx_config_comment($config_file[$i]);
@ -110,8 +110,8 @@ class phpbb_search_sphinx_config
} }
else else
{ {
// otherwise we scan the line reading the section name until we find /* otherwise we scan the line reading the section name until we find
// an opening curly bracket or a comment an opening curly bracket or a comment */
$section_name = ''; $section_name = '';
$section_name_comment = ''; $section_name_comment = '';
$found_opening_bracket = false; $found_opening_bracket = false;
@ -137,28 +137,29 @@ class phpbb_search_sphinx_config
$section_name .= $line[$j]; $section_name .= $line[$j];
} }
// and then we create the new section object // And then we create the new section object
$section_name = trim($section_name); $section_name = trim($section_name);
$section = new phpbb_search_sphinx_config_section($section_name, $section_name_comment); $section = new phpbb_search_sphinx_config_section($section_name, $section_name_comment);
} }
} }
else // if we're looking for variables inside a section else
{ {
// If we're looking for variables inside a section
$skip_first = false; $skip_first = false;
// if we're not in a value continuing over the line feed // If we're not in a value continuing over the line feed
if (!$in_value) if (!$in_value)
{ {
// then add empty lines and comments as comment objects to the variable list /* then add empty lines and comments as comment objects to the variable list
// of this section so they're not deleted on reassembly of this section so they're not deleted on reassembly */
if (!$line || $line[0] == '#') if (!$line || $line[0] == '#')
{ {
$section->add_variable(new phpbb_search_sphinx_config_comment($config_file[$i])); $section->add_variable(new phpbb_search_sphinx_config_comment($config_file[$i]));
continue; continue;
} }
// as long as we haven't yet actually found an opening bracket for this section /* As long as we haven't yet actually found an opening bracket for this section
// we treat everything as comments so it's not deleted either we treat everything as comments so it's not deleted either */
if (!$found_opening_bracket) if (!$found_opening_bracket)
{ {
if ($line[0] == '{') if ($line[0] == '{')
@ -175,7 +176,8 @@ class phpbb_search_sphinx_config
} }
} }
// if we did not find a comment in this line or still add to the previous line's value ... /* If we did not find a comment in this line or still add to the previous
line's value ... */
if ($line || $in_value) if ($line || $in_value)
{ {
if (!$in_value) if (!$in_value)
@ -226,21 +228,24 @@ class phpbb_search_sphinx_config
{ {
$value .= "\n"; $value .= "\n";
$in_value = true; $in_value = true;
continue 2; // go to the next line and keep processing the value in there // Go to the next line and keep processing the value in there
continue 2;
} }
$value .= $line[$j]; $value .= $line[$j];
} }
} }
// if a name and an equal sign were found then we have append a new variable object to the section /* If a name and an equal sign were found then we have append a
new variable object to the section */
if ($name && $found_assignment) if ($name && $found_assignment)
{ {
$section->add_variable(new phpbb_search_sphinx_config_variable(trim($name), trim($value), ($end_section) ? '' : $comment)); $section->add_variable(new phpbb_search_sphinx_config_variable(trim($name), trim($value), ($end_section) ? '' : $comment));
continue; continue;
} }
// if we found a closing curly bracket this section has been completed and we can append it to the section list /* if we found a closing curly bracket this section has been completed
// and continue with looking for the next section and we can append it to the section list and continue with looking for
the next section */
if ($end_section) if ($end_section)
{ {
$section->set_end_comment($comment); $section->set_end_comment($comment);
@ -250,13 +255,14 @@ class phpbb_search_sphinx_config
} }
} }
// if we did not find anything meaningful up to here, then just treat it as a comment /* If we did not find anything meaningful up to here, then just treat it
as a comment */
$comment = ($skip_first) ? "\t" . substr(ltrim($config_file[$i]), 1) : $config_file[$i]; $comment = ($skip_first) ? "\t" . substr(ltrim($config_file[$i]), 1) : $config_file[$i];
$section->add_variable(new phpbb_search_sphinx_config_comment($comment)); $section->add_variable(new phpbb_search_sphinx_config_comment($comment));
} }
} }
// keep the filename for later use // Keep the filename for later use
$this->loaded = $filename; $this->loaded = $filename;
} }

View file

@ -79,7 +79,7 @@ class phpbb_search_sphinx_config_section
{ {
for ($i = 0, $size = sizeof($this->variables); $i < $size; $i++) for ($i = 0, $size = sizeof($this->variables); $i < $size; $i++)
{ {
// make sure this is a variable object and not a comment // Make sure this is a variable object and not a comment
if (($this->variables[$i] instanceof phpbb_search_sphinx_config_variable) && $this->variables[$i]->get_name() == $name) if (($this->variables[$i] instanceof phpbb_search_sphinx_config_variable) && $this->variables[$i]->get_name() == $name)
{ {
return $this->variables[$i]; return $this->variables[$i];
@ -96,7 +96,7 @@ class phpbb_search_sphinx_config_section
{ {
for ($i = 0, $size = sizeof($this->variables); $i < $size; $i++) for ($i = 0, $size = sizeof($this->variables); $i < $size; $i++)
{ {
// make sure this is a variable object and not a comment // Make sure this is a variable object and not a comment
if (($this->variables[$i] instanceof phpbb_search_sphinx_config_variable) && $this->variables[$i]->get_name() == $name) if (($this->variables[$i] instanceof phpbb_search_sphinx_config_variable) && $this->variables[$i]->get_name() == $name)
{ {
array_splice($this->variables, $i, 1); array_splice($this->variables, $i, 1);
@ -127,7 +127,7 @@ class phpbb_search_sphinx_config_section
{ {
$content = $this->name . ' ' . $this->comment . "\n{\n"; $content = $this->name . ' ' . $this->comment . "\n{\n";
// make sure we don't get too many newlines after the opening bracket // Make sure we don't get too many newlines after the opening bracket
while (trim($this->variables[0]->to_string()) == '') while (trim($this->variables[0]->to_string()) == '')
{ {
array_shift($this->variables); array_shift($this->variables);