DCausse has uploaded a new change for review.
https://gerrit.wikimedia.org/r/323804
Change subject: Move the Escaper into the SeachContext
......................................................................
Move the Escaper into the SeachContext
Just to make Keyword features construction a bit more homogeneous.
Change-Id: Id37932c8da41a3ae3df896c013a519db8e6e59d9
---
M includes/Query/FullTextQueryStringQueryBuilder.php
M includes/Query/FullTextSimpleMatchQueryBuilder.php
M includes/Query/InTitleFeature.php
M includes/Query/SimpleInSourceFeature.php
M includes/Search/SearchContext.php
M includes/Searcher.php
M tests/unit/Query/FullTextQueryStringQueryBuilder.php
M tests/unit/Query/InTitleFeatureTest.php
8 files changed, 40 insertions(+), 60 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/CirrusSearch
refs/changes/04/323804/1
diff --git a/includes/Query/FullTextQueryStringQueryBuilder.php
b/includes/Query/FullTextQueryStringQueryBuilder.php
index 9b1416b..b2cd340 100644
--- a/includes/Query/FullTextQueryStringQueryBuilder.php
+++ b/includes/Query/FullTextQueryStringQueryBuilder.php
@@ -5,7 +5,6 @@
use CirrusSearch\OtherIndexes;
use CirrusSearch\SearchConfig;
use CirrusSearch\Searcher;
-use CirrusSearch\Search\Escaper;
use CirrusSearch\Search\SearchContext;
use MediaWiki\Logger\LoggerFactory;
@@ -20,11 +19,6 @@
protected $config;
/**
- * @var Escaper
- */
- private $escaper;
-
- /**
* @var KeywordFeature[]
*/
private $features;
@@ -36,13 +30,11 @@
/**
* @param SearchConfig $config
- * @param Escaper $escaper
* @param KeywordFeature[] $features
* @param array[] $settings currently ignored
*/
- public function __construct( SearchConfig $config, Escaper $escaper,
array $features, array $settings = [] ) {
+ public function __construct( SearchConfig $config, array $features,
array $settings = [] ) {
$this->config = $config;
- $this->escaper = $escaper;
$this->features = $features;
}
@@ -67,7 +59,7 @@
return;
}
- $term = $this->escaper->escapeQuotes( $term );
+ $term = $searchContext->escaper()->escapeQuotes( $term );
$term = trim( $term );
// Match quoted phrases including those containing escaped
quotes.
@@ -83,7 +75,7 @@
"/$matchQuotesRegex/",
function ( $matches ) use ( $searchContext, $slop ) {
$negate = $matches[ 'negate' ][ 0 ] ? 'NOT ' :
'';
- $main = $this->escaper->fixupQueryStringPart(
$matches[ 'main' ][ 0 ] );
+ $main =
$searchContext->escaper()->fixupQueryStringPart( $matches[ 'main' ][ 0 ] );
if ( !$negate && !isset( $matches[ 'fuzzy' ] )
&& !isset( $matches[ 'slop' ] ) &&
preg_match(
'/^"([^"*]+)[*]"/', $main, $matches ) ) {
@@ -119,7 +111,7 @@
// in prefix queries.
$query = self::replaceAllPartsOfQuery( $query,
'/\w+\*(?:\w*\*?)*/u',
function ( $matches ) use ( $searchContext ) {
- $term = $this->escaper->fixupQueryStringPart(
$matches[ 0 ][ 0 ] );
+ $term =
$searchContext->escaper()->fixupQueryStringPart( $matches[ 0 ][ 0 ] );
return [
'escaped' =>
self::switchSearchToExactForWildcards( $searchContext, $term ),
'nonAll' =>
self::switchSearchToExactForWildcards( $searchContext, $term )
@@ -140,7 +132,7 @@
continue;
}
if ( isset( $queryPart[ 'raw' ] ) ) {
- $fixed = $this->escaper->fixupQueryStringPart(
$queryPart[ 'raw' ] );
+ $fixed =
$searchContext->escaper()->fixupQueryStringPart( $queryPart[ 'raw' ] );
$escapedQuery[] = $fixed;
$nonAllQuery[] = $fixed;
$nearMatchQuery[] = $queryPart[ 'raw' ];
@@ -154,7 +146,7 @@
// Actual text query
list( $this->queryStringQueryString, $fuzzyQuery ) =
- $this->escaper->fixupWholeQueryString( implode( ' ',
$escapedQuery ) );
+ $searchContext->escaper()->fixupWholeQueryString(
implode( ' ', $escapedQuery ) );
$searchContext->setFuzzyQuery( $fuzzyQuery );
if ( $this->queryStringQueryString === '' ) {
@@ -205,7 +197,7 @@
$nonAllFields = array_merge(
self::buildFullTextSearchFields(
$searchContext, 1, '.plain', false ),
self::buildFullTextSearchFields(
$searchContext, $this->config->get( 'CirrusSearchStemmedWeight' ), '', false )
);
- list( $nonAllQueryString, /*_*/ ) =
$this->escaper->fixupWholeQueryString( implode( ' ', $nonAllQuery ) );
+ list( $nonAllQueryString, /*_*/ ) =
$searchContext->escaper()->fixupWholeQueryString( implode( ' ', $nonAllQuery )
);
$searchContext->setHighlightQuery(
$this->buildHighlightQuery( $searchContext,
$nonAllFields, $nonAllQueryString, 1 )
);
diff --git a/includes/Query/FullTextSimpleMatchQueryBuilder.php
b/includes/Query/FullTextSimpleMatchQueryBuilder.php
index eadca32..fd31ebe 100644
--- a/includes/Query/FullTextSimpleMatchQueryBuilder.php
+++ b/includes/Query/FullTextSimpleMatchQueryBuilder.php
@@ -2,7 +2,6 @@
namespace CirrusSearch\Query;
-use CirrusSearch\Search\Escaper;
use CirrusSearch\Search\SearchContext;
use CirrusSearch\SearchConfig;
@@ -50,8 +49,8 @@
*/
private $dismaxSettings;
- public function __construct( SearchConfig $config, Escaper $escaper,
array $feature, array $settings ) {
- parent::__construct( $config, $escaper, $feature );
+ public function __construct( SearchConfig $config, array $feature,
array $settings ) {
+ parent::__construct( $config, $feature );
$this->fields = $settings['fields'];
$this->phraseFields = $settings['phrase_rescore_fields'];
$this->defaultStemWeight = $settings['default_stem_weight'];
diff --git a/includes/Query/InTitleFeature.php
b/includes/Query/InTitleFeature.php
index 091c437..6177016 100644
--- a/includes/Query/InTitleFeature.php
+++ b/includes/Query/InTitleFeature.php
@@ -2,7 +2,6 @@
namespace CirrusSearch\Query;
-use CirrusSearch\Search\Escaper;
use CirrusSearch\Search\Filters;
use CirrusSearch\Search\SearchContext;
@@ -24,16 +23,6 @@
* intitle:"foo OR bar"
*/
class InTitleFeature extends SimpleKeywordFeature {
-
- /**
- * @var Escaper
- */
- private $escaper;
-
- public function __construct( Escaper $escaper ) {
- $this->escaper = $escaper;
- }
-
/**
* @return string
*/
@@ -53,7 +42,7 @@
* string.
*/
protected function doApply( SearchContext $context, $key, $value,
$quotedValue, $negated ) {
- $filter = Filters::intitle( $this->escaper, $context,
$quotedValue );
+ $filter = Filters::intitle( $context->escaper(), $context,
$quotedValue );
return [ $filter, !$negated ];
}
diff --git a/includes/Query/SimpleInSourceFeature.php
b/includes/Query/SimpleInSourceFeature.php
index 7257f00..a6fa156 100644
--- a/includes/Query/SimpleInSourceFeature.php
+++ b/includes/Query/SimpleInSourceFeature.php
@@ -2,7 +2,6 @@
namespace CirrusSearch\Query;
-use CirrusSearch\Search\Escaper;
use CirrusSearch\Search\Filters;
use CirrusSearch\Search\SearchContext;
@@ -23,16 +22,6 @@
* insource:"foo OR bar"
*/
class SimpleInSourceFeature extends SimpleKeywordFeature {
-
- /**
- * @var Escaper
- */
- private $escaper;
-
- public function __construct( Escaper $escaper ) {
- $this->escaper = $escaper;
- }
-
/**
* @return string
*/
@@ -52,7 +41,7 @@
* string.
*/
protected function doApply( SearchContext $context, $key, $value,
$quotedValue, $negated ) {
- $filter = Filters::insource( $this->escaper, $context,
$quotedValue );
+ $filter = Filters::insource( $context->escaper(), $context,
$quotedValue );
$context->addHighlightSource( [ 'query' => $filter ] );
return [ $filter, false ];
diff --git a/includes/Search/SearchContext.php
b/includes/Search/SearchContext.php
index 90912c7..8fe33dc 100644
--- a/includes/Search/SearchContext.php
+++ b/includes/Search/SearchContext.php
@@ -165,14 +165,19 @@
private $limitSearchToLocalWiki = false;
/**
- * @param int The number of seconds to cache results for
+ * @var int The number of seconds to cache results for
*/
private $cacheTtl = 0;
/**
- * @param string The original search
+ * @var string The original search
*/
private $originalSearchTerm;
+
+ /**
+ * @var Escaper $escaper
+ */
+ private $escaper;
/**
* @param SearchConfig $config
@@ -190,6 +195,7 @@
$this->preferRecentDecayPortion = $decay;
$this->preferRecentHalfLife = $this->config->get(
'CirrusSearchPreferRecentDefaultHalfLife' );
}
+ $this->escaper = new Escaper( $config->get( 'LanguageCode' ),
$config->get( 'CirrusSearchAllowLeadingWildcard' ) );
}
public function __clone() {
@@ -666,4 +672,11 @@
public function setOriginalSearchTerm( $term ) {
$this->originalSearchTerm = $term;
}
+
+ /**
+ * @return Escaper
+ */
+ public function escaper() {
+ return $this->escaper;
+ }
}
diff --git a/includes/Searcher.php b/includes/Searcher.php
index da0c036..c44b4dd 100644
--- a/includes/Searcher.php
+++ b/includes/Searcher.php
@@ -2,7 +2,6 @@
namespace CirrusSearch;
-use CirrusSearch\Search\Escaper;
use CirrusSearch\Search\FullTextResultsType;
use CirrusSearch\Search\ResultsType;
use CirrusSearch\Search\RescoreBuilder;
@@ -93,11 +92,6 @@
protected $indexBaseName;
/**
- * @var Escaper escapes queries
- */
- private $escaper;
-
- /**
* @var boolean just return the array that makes up the query instead
of searching
*/
private $returnQuery = false;
@@ -146,7 +140,6 @@
}
$this->indexBaseName = $index ?: $config->get(
SearchConfig::INDEX_BASE_NAME );
$this->language = $config->get( 'ContLang' );
- $this->escaper = new Escaper( $config->get( 'LanguageCode' ),
$config->get( 'CirrusSearchAllowLeadingWildcard' ) );
$this->searchContext = new SearchContext( $this->config,
$namespaces );
}
@@ -302,7 +295,6 @@
$qb = new $builderSettings['builder_class'](
$this->config,
- $this->escaper,
[
// Handle morelike keyword (greedy). This needs
to be the
// very first item until combining with other
queries
@@ -327,9 +319,9 @@
// Handle incategory keyword
new Query\InCategoryFeature( $this->config ),
// Handle non-regex insource keyword
- new Query\SimpleInSourceFeature( $this->escaper
),
+ new Query\SimpleInSourceFeature(),
// Handle intitle keyword
- new Query\InTitleFeature( $this->escaper ),
+ new Query\InTitleFeature(),
// inlanguage keyword
new Query\LanguageFeature(),
// File types
diff --git a/tests/unit/Query/FullTextQueryStringQueryBuilder.php
b/tests/unit/Query/FullTextQueryStringQueryBuilder.php
index d1bf53f..d06428b 100644
--- a/tests/unit/Query/FullTextQueryStringQueryBuilder.php
+++ b/tests/unit/Query/FullTextQueryStringQueryBuilder.php
@@ -4,7 +4,6 @@
use CirrusSearch\CirrusTestCase;
use CirrusSearch\Test\HashSearchConfig;
-use CirrusSearch\Search\Escaper;
use CirrusSearch\Search\SearchContext;
use CirrusSearch\Util;
@@ -131,9 +130,8 @@
// mark stripping which is normally done in
Searcher::searchText()
$term = Util::stripQuestionMarks( $term, 'all' );
- $config = new HashSearchConfig([]);
- $escaper = new Escaper('en', false);
- $builder = new FullTextQueryStringQueryBuilder( $config,
$escaper, [] );
+ $config = new HashSearchConfig(['wgLanguageCode' => 'en']);
+ $builder = new FullTextQueryStringQueryBuilder( $config, [] );
$searchContext = new SearchContext( $config );
$builder->build( $searchContext, $term, false );
$actual = $searchContext->getSyntaxUsed();
diff --git a/tests/unit/Query/InTitleFeatureTest.php
b/tests/unit/Query/InTitleFeatureTest.php
index 0ee4aca..3b8fc1d 100644
--- a/tests/unit/Query/InTitleFeatureTest.php
+++ b/tests/unit/Query/InTitleFeatureTest.php
@@ -64,7 +64,11 @@
->with( $isFuzzy );
// This test is kinda-sorta testing the escaper too ... maybe
not optimal but simple
- $feature = new InTitleFeature( new Escaper( 'en' ) );
+ $context->expects( $this->once() )
+ ->method( 'escaper')
+ ->will( $this->returnValue( new Escaper( 'en' ) ) );
+
+ $feature = new InTitleFeature();
$this->assertEquals(
$expectedTerm,
$feature->apply( $context, $term )
@@ -76,7 +80,11 @@
->disableOriginalConstructor()
->getMock();
- $feature = new InTitleFeature( new Escaper( 'en' ) );
+ $context->expects( $this->once() )
+ ->method( 'escaper')
+ ->will( $this->returnValue( new Escaper( 'en' ) ) );
+
+ $feature = new InTitleFeature();
$this->assertEquals( '', $feature->apply( $context,
'-intitle:mediawiki' ) );
}
}
--
To view, visit https://gerrit.wikimedia.org/r/323804
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id37932c8da41a3ae3df896c013a519db8e6e59d9
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/CirrusSearch
Gerrit-Branch: master
Gerrit-Owner: DCausse <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits