Somewhat better behaviour with mixed caps in search
Deal somewhat better with mixed caps in people and notice search.
This commit is contained in:
parent
5dc913f589
commit
d1b2a9d708
@ -1,9 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
|
||||||
// define('GROUPS_PER_PAGE', 20);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Group search action class.
|
* Group search action class.
|
||||||
*
|
*
|
||||||
@ -90,15 +85,15 @@ class GroupSearchResults extends GroupList
|
|||||||
{
|
{
|
||||||
var $terms = null;
|
var $terms = null;
|
||||||
var $pattern = null;
|
var $pattern = null;
|
||||||
|
|
||||||
function __construct($user_group, $terms, $action)
|
function __construct($user_group, $terms, $action)
|
||||||
{
|
{
|
||||||
parent::__construct($user_group, $terms, $action);
|
parent::__construct($user_group, $terms, $action);
|
||||||
$this->terms = array_map('preg_quote',
|
$this->terms = array_map('preg_quote',
|
||||||
array_map('htmlspecialchars', $terms));
|
array_map('htmlspecialchars', $terms));
|
||||||
$this->pattern = '/('.implode('|',$terms).')/i';
|
$this->pattern = '/('.implode('|',$terms).')/i';
|
||||||
}
|
}
|
||||||
|
|
||||||
function highlight($text)
|
function highlight($text)
|
||||||
{
|
{
|
||||||
return preg_replace($this->pattern, '<strong>\\1</strong>', htmlspecialchars($text));
|
return preg_replace($this->pattern, '<strong>\\1</strong>', htmlspecialchars($text));
|
||||||
|
@ -103,7 +103,7 @@ class NoticesearchAction extends SearchAction
|
|||||||
function showResults($q, $page)
|
function showResults($q, $page)
|
||||||
{
|
{
|
||||||
$notice = new Notice();
|
$notice = new Notice();
|
||||||
$q = strtolower($q);
|
|
||||||
$search_engine = $notice->getSearchEngine('identica_notices');
|
$search_engine = $notice->getSearchEngine('identica_notices');
|
||||||
$search_engine->set_sort_mode('chron');
|
$search_engine->set_sort_mode('chron');
|
||||||
// Ask for an extra to see if there's more.
|
// Ask for an extra to see if there's more.
|
||||||
|
@ -62,9 +62,6 @@ class NoticesearchrssAction extends Rss10Action
|
|||||||
|
|
||||||
$notice = new Notice();
|
$notice = new Notice();
|
||||||
|
|
||||||
# lcase it for comparison
|
|
||||||
$q = strtolower($q);
|
|
||||||
|
|
||||||
$search_engine = $notice->getSearchEngine('identica_notices');
|
$search_engine = $notice->getSearchEngine('identica_notices');
|
||||||
$search_engine->set_sort_mode('chron');
|
$search_engine->set_sort_mode('chron');
|
||||||
|
|
||||||
|
@ -63,13 +63,13 @@ class PeoplesearchAction extends SearchAction
|
|||||||
|
|
||||||
$profile = new Profile();
|
$profile = new Profile();
|
||||||
|
|
||||||
# lcase it for comparison
|
// lcase it for comparison
|
||||||
$q = strtolower($q);
|
// $q = strtolower($q);
|
||||||
|
|
||||||
$search_engine = $profile->getSearchEngine('identica_people');
|
$search_engine = $profile->getSearchEngine('identica_people');
|
||||||
|
|
||||||
$search_engine->set_sort_mode('chron');
|
$search_engine->set_sort_mode('chron');
|
||||||
# Ask for an extra to see if there's more.
|
// Ask for an extra to see if there's more.
|
||||||
$search_engine->limit((($page-1)*PROFILES_PER_PAGE), PROFILES_PER_PAGE + 1);
|
$search_engine->limit((($page-1)*PROFILES_PER_PAGE), PROFILES_PER_PAGE + 1);
|
||||||
if (false === $search_engine->query($q)) {
|
if (false === $search_engine->query($q)) {
|
||||||
$cnt = 0;
|
$cnt = 0;
|
||||||
|
@ -74,7 +74,7 @@ class SphinxSearch extends SearchEngine
|
|||||||
{
|
{
|
||||||
//FIXME without LARGEST_POSSIBLE, the most recent results aren't returned
|
//FIXME without LARGEST_POSSIBLE, the most recent results aren't returned
|
||||||
// this probably has a large impact on performance
|
// this probably has a large impact on performance
|
||||||
$LARGEST_POSSIBLE = 1e6;
|
$LARGEST_POSSIBLE = 1e6;
|
||||||
|
|
||||||
if ($rss) {
|
if ($rss) {
|
||||||
$this->sphinx->setLimits($offset, $count, $count, $LARGEST_POSSIBLE);
|
$this->sphinx->setLimits($offset, $count, $count, $LARGEST_POSSIBLE);
|
||||||
@ -109,12 +109,25 @@ class MySQLSearch extends SearchEngine
|
|||||||
{
|
{
|
||||||
function query($q)
|
function query($q)
|
||||||
{
|
{
|
||||||
if ('identica_people' === $this->table)
|
if ('identica_people' === $this->table) {
|
||||||
return $this->target->whereAdd('MATCH(nickname, fullname, location, bio, homepage) ' .
|
$this->target->whereAdd('MATCH(nickname, fullname, location, bio, homepage) ' .
|
||||||
'against (\''.addslashes($q).'\')');
|
'AGAINST (\''.addslashes($q).'\' IN BOOLEAN MODE)');
|
||||||
if ('identica_notices' === $this->table)
|
if (strtolower($q) != $q) {
|
||||||
return $this->target->whereAdd('MATCH(content) ' .
|
$this->target->whereAdd('MATCH(nickname, fullname, location, bio, homepage) ' .
|
||||||
'against (\''.addslashes($q).'\')');
|
'AGAINST (\''.addslashes(strtolower($q)).'\' IN BOOLEAN MODE)', 'OR');
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} else if ('identica_notices' === $this->table) {
|
||||||
|
$this->target->whereAdd('MATCH(content) ' .
|
||||||
|
'AGAINST (\''.addslashes($q).'\' IN BOOLEAN MODE)');
|
||||||
|
if (strtolower($q) != $q) {
|
||||||
|
$this->target->whereAdd('MATCH(content) ' .
|
||||||
|
'AGAINST (\''.addslashes(strtolower($q)).'\' IN BOOLEAN MODE)', 'OR');
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
throw new ServerException('Unknown table: ' . $this->table);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,10 +135,13 @@ class PGSearch extends SearchEngine
|
|||||||
{
|
{
|
||||||
function query($q)
|
function query($q)
|
||||||
{
|
{
|
||||||
if ('identica_people' === $this->table)
|
if ('identica_people' === $this->table) {
|
||||||
return $this->target->whereAdd('textsearch @@ plainto_tsquery(\''.addslashes($q).'\')');
|
return $this->target->whereAdd('textsearch @@ plainto_tsquery(\''.addslashes($q).'\')');
|
||||||
if ('identica_notices' === $this->table)
|
} else if ('identica_notices' === $this->table) {
|
||||||
return $this->target->whereAdd('to_tsvector(\'english\', content) @@ plainto_tsquery(\''.addslashes($q).'\')');
|
return $this->target->whereAdd('to_tsvector(\'english\', content) @@ plainto_tsquery(\''.addslashes($q).'\')');
|
||||||
|
} else {
|
||||||
|
throw new ServerException('Unknown table: ' . $this->table);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user