mirror of
https://github.com/silverstripe/silverstripe-fulltextsearch
synced 2024-10-22 14:05:29 +02:00
Merge branch '3'
# Conflicts: # composer.json # src/Solr/Tasks/Solr_Configure.php
This commit is contained in:
commit
d6a119ce20
@ -136,9 +136,11 @@
|
||||
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
|
||||
<filter class="solr.LowerCaseFilterFactory"/>
|
||||
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
|
||||
<filter class="solr.ASCIIFoldingFilterFactory"/>
|
||||
</analyzer>
|
||||
<analyzer type="query">
|
||||
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||
<filter class="solr.ASCIIFoldingFilterFactory"/>
|
||||
<filter class="solr.KeywordRepeatFilterFactory"/>
|
||||
<filter class="solr.StopFilterFactory"
|
||||
ignoreCase="true"
|
||||
@ -162,9 +164,11 @@
|
||||
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
|
||||
<filter class="solr.LowerCaseFilterFactory"/>
|
||||
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
|
||||
<filter class="solr.ASCIIFoldingFilterFactory"/>
|
||||
</analyzer>
|
||||
<analyzer type="query">
|
||||
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||
<filter class="solr.ASCIIFoldingFilterFactory"/>
|
||||
<filter class="solr.KeywordRepeatFilterFactory"/>
|
||||
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
|
||||
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
|
||||
|
@ -428,7 +428,7 @@ To allow searches on words containing numeric tokens, you'll need to change the
|
||||
|
||||
The `ASCIIFoldingFilterFactory` filter converts alphabetic, numeric, and symbolic Unicode characters which are not in the Basic Latin Unicode block (the first 127 ASCII characters) to their ASCII equivalents, if one exists.
|
||||
|
||||
Find the fields in your overloaded `types.ss` that you want to enable this behaviour in, for example inside the `<fieldType name="htmltext">` block, add the following to both its index analyzer and query analyzer records.
|
||||
By default, this functionality is enabled on the `htmltext` and `text` fieldTypes. If you want it enabled for any other fieldTypes simply find the fields in your overloaded `types.ss` that you want to enable this behaviour in, for example inside the `<fieldType name="textTight">` block, add the following to both its index analyzer and query analyzer records.
|
||||
|
||||
```xml
|
||||
<filter class="solr.ASCIIFoldingFilterFactory"/>
|
||||
|
@ -186,6 +186,11 @@ abstract class SearchVariant
|
||||
// Construct new array of variants applicable to at least one class in the list
|
||||
$commonVariants = [];
|
||||
foreach ($classes as $class => $options) {
|
||||
// BC for numerically indexed list of classes
|
||||
if (is_numeric($class) && !empty($options['class'])) {
|
||||
$class = $options['class']; // $options['class'] is assumed to exist throughout the code base
|
||||
}
|
||||
|
||||
// Extract relevant class options
|
||||
$includeSubclasses = isset($options['include_children']) ? $options['include_children'] : true;
|
||||
|
||||
|
@ -9,6 +9,8 @@ use SilverStripe\Core\Manifest\ModuleLoader;
|
||||
use SilverStripe\FullTextSearch\Search\FullTextSearch;
|
||||
use SilverStripe\FullTextSearch\Solr\Services\Solr4Service;
|
||||
use SilverStripe\FullTextSearch\Solr\Services\Solr3Service;
|
||||
use SilverStripe\FullTextSearch\Solr\Services\SolrService;
|
||||
use SilverStripe\FullTextSearch\Solr\Services\SolrService_Core;
|
||||
|
||||
class Solr
|
||||
{
|
||||
@ -118,14 +120,14 @@ class Solr
|
||||
|
||||
/** @var SolrService | null - The instance of SolrService for core management */
|
||||
protected static $service_singleton = null;
|
||||
/** @var [SolrService_Core] - The instances of SolrService_Core for each core */
|
||||
/** @var SolrService_Core[] - The instances of SolrService_Core for each core */
|
||||
protected static $service_core_singletons = array();
|
||||
|
||||
/**
|
||||
* Get a SolrService
|
||||
*
|
||||
* @param string $core Optional name of index class
|
||||
* @return SolrService_Core
|
||||
* @return SolrService|SolrService_Core
|
||||
*/
|
||||
public static function service($core = null)
|
||||
{
|
||||
@ -148,9 +150,8 @@ class Solr
|
||||
}
|
||||
|
||||
return self::$service_core_singletons[$core];
|
||||
} else {
|
||||
return self::$service_singleton;
|
||||
}
|
||||
return self::$service_singleton;
|
||||
}
|
||||
|
||||
public static function get_indexes()
|
||||
|
@ -12,6 +12,7 @@ use SilverStripe\FullTextSearch\Search\Queries\SearchQuery;
|
||||
use SilverStripe\FullTextSearch\Search\Queries\SearchQuery_Range;
|
||||
use SilverStripe\FullTextSearch\Search\Variants\SearchVariant;
|
||||
use SilverStripe\FullTextSearch\Search\SearchIntrospection;
|
||||
use SilverStripe\FullTextSearch\Solr\Stores\SolrConfigStore;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\ORM\FieldType\DBField;
|
||||
|
@ -3,6 +3,7 @@ namespace SilverStripe\FullTextSearch\Solr\Tasks;
|
||||
|
||||
use Monolog\Handler\StreamHandler;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use SilverStripe\Control\HTTPRequest;
|
||||
use SilverStripe\Core\Injector\Injector;
|
||||
use SilverStripe\Dev\BuildTask;
|
||||
use SilverStripe\FullTextSearch\Utils\Logging\SearchLogFactory;
|
||||
@ -52,7 +53,7 @@ class Solr_BuildTask extends BuildTask
|
||||
/**
|
||||
* Setup task
|
||||
*
|
||||
* @param SS_HTTPReqest $request
|
||||
* @param HTTPRequest $request
|
||||
*/
|
||||
public function run($request)
|
||||
{
|
||||
|
@ -4,10 +4,11 @@ namespace SilverStripe\FullTextSearch\Solr\Tasks;
|
||||
use Exception;
|
||||
use SilverStripe\Core\ClassInfo;
|
||||
use SilverStripe\FullTextSearch\Solr\Solr;
|
||||
use SilverStripe\FullTextSearch\Solr\SolrIndex;
|
||||
use SilverStripe\FullTextSearch\Solr\Stores\SolrConfigStore;
|
||||
use SilverStripe\FullTextSearch\Solr\Stores\SolrConfigStore_File;
|
||||
use SilverStripe\FullTextSearch\Solr\Stores\SolrConfigStore_Post;
|
||||
use SilverStripe\FullTextSearch\Solr\Stores\SolrConfigStore_WebDAV;
|
||||
use SilverStripe\FullTextSearch\Solr\Stores\SolrConfigStore;
|
||||
|
||||
class Solr_Configure extends Solr_BuildTask
|
||||
{
|
||||
@ -51,29 +52,30 @@ class Solr_Configure extends Solr_BuildTask
|
||||
protected function updateIndex($instance, $store)
|
||||
{
|
||||
$index = $instance->getIndexName();
|
||||
$this->getLogger()->addInfo("Configuring $index.");
|
||||
$this->getLogger()->info("Configuring $index.");
|
||||
|
||||
// Upload the config files for this index
|
||||
$this->getLogger()->addInfo("Uploading configuration ...");
|
||||
$this->getLogger()->info("Uploading configuration ...");
|
||||
$instance->uploadConfig($store);
|
||||
|
||||
// Then tell Solr to use those config files
|
||||
$service = Solr::service();
|
||||
if ($service->coreIsActive($index)) {
|
||||
$this->getLogger()->addInfo("Reloading core ...");
|
||||
$this->getLogger()->info("Reloading core ...");
|
||||
$service->coreReload($index);
|
||||
} else {
|
||||
$this->getLogger()->addInfo("Creating core ...");
|
||||
$this->getLogger()->info("Creating core ...");
|
||||
$service->coreCreate($index, $store->instanceDir($index));
|
||||
}
|
||||
|
||||
$this->getLogger()->addInfo("Done");
|
||||
$this->getLogger()->info("Done");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get config store
|
||||
*
|
||||
* @return SolrConfigStore
|
||||
* @throws Exception
|
||||
*/
|
||||
protected function getSolrConfigStore()
|
||||
{
|
||||
@ -86,16 +88,18 @@ class Solr_Configure extends Solr_BuildTask
|
||||
// Find the IndexStore handler, which will handle uploading config files to Solr
|
||||
$mode = $indexstore['mode'];
|
||||
|
||||
if ($mode == 'file') {
|
||||
if ($mode === 'file') {
|
||||
return new SolrConfigStore_File($indexstore);
|
||||
} elseif ($mode == 'webdav') {
|
||||
}
|
||||
if ($mode === 'webdav') {
|
||||
return new SolrConfigStore_WebDAV($indexstore);
|
||||
} elseif ($mode == 'post') {
|
||||
}
|
||||
if ($mode === 'post') {
|
||||
return new SolrConfigStore_Post($indexstore);
|
||||
} elseif (ClassInfo::exists($mode) && ClassInfo::classImplements($mode, SolrConfigStore::class)) {
|
||||
}
|
||||
if (ClassInfo::exists($mode) && ClassInfo::classImplements($mode, SolrConfigStore::class)) {
|
||||
return new $mode($indexstore);
|
||||
} else {
|
||||
}
|
||||
user_error('Unknown Solr index mode ' . $indexstore['mode'], E_USER_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace SilverStripe\FullTextSearch\Utils\Logging;
|
||||
|
||||
use Psr\Log;
|
||||
use Symbiote\QueuedJobs\Services\QueuedJob;
|
||||
|
||||
interface SearchLogFactory
|
||||
{
|
||||
@ -10,7 +11,7 @@ interface SearchLogFactory
|
||||
* Make a logger for a queuedjob
|
||||
*
|
||||
* @param QueuedJob $job
|
||||
* @return Log
|
||||
* @return Log\LoggerInterface
|
||||
*/
|
||||
public function getQueuedJobLogger($job);
|
||||
|
||||
@ -19,7 +20,7 @@ interface SearchLogFactory
|
||||
*
|
||||
* @param string $name
|
||||
* @param bool $verbose
|
||||
* @return Log
|
||||
* @return Log\LoggerInterface
|
||||
*/
|
||||
public function getOutputLogger($name, $verbose);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user