mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-27 21:58:52 +00:00
[feature/sphinx-fulltext-search] fix comments
PHPBB3-10946
This commit is contained in:
parent
537a16220e
commit
fdb7e64e29
3 changed files with 53 additions and 39 deletions
|
@ -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--)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue