Commit 2384976e authored by Bas de Nooijer's avatar Bas de Nooijer

Merged spellcheck

parents 1ab43733 9665a60e
<?php
/**
* Copyright 2011 Bas de Nooijer. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this listof conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are
* those of the authors and should not be interpreted as representing official
* policies, either expressed or implied, of the copyright holder.
*
* @copyright Copyright 2011 Bas de Nooijer <solarium@raspberry.nl>
* @license http://github.com/basdenooijer/solarium/raw/master/COPYING
* @link http://www.solarium-project.org/
*
* @package Solarium
* @subpackage Client
*/
/**
* Add select component Spellcheck to the request
*
* @package Solarium
* @subpackage Client
*/
class Solarium_Client_RequestBuilder_Select_Component_Spellcheck
{
/**
* Add request settings for Spellcheck
*
* @param Solarium_Query_Select_Component_Spellcheck $component
* @param Solarium_Client_Request $request
* @return Solarium_Client_Request
*/
public function build($component, $request)
{
// enable spellcheck
$request->addParam('spellcheck', 'true');
$request->addParam('spellcheck.q', $component->getQuery());
$request->addParam('spellcheck.build', $component->getBuild());
$request->addParam('spellcheck.reload', $component->getReload());
$request->addParam('spellcheck.dictionary', $component->getDictionary());
$request->addParam('spellcheck.count', $component->getCount());
$request->addParam('spellcheck.onlyMorePopular', $component->getOnlyMorePopular());
$request->addParam('spellcheck.extendedResults', $component->getExtendedResults());
$request->addParam('spellcheck.collate', $component->getCollate());
$request->addParam('spellcheck.maxCollations', $component->getMaxCollations());
$request->addParam('spellcheck.maxCollationTries', $component->getMaxCollationTries());
$request->addParam('spellcheck.maxCollationEvaluations', $component->getMaxCollationEvaluations());
$request->addParam('spellcheck.collateExtendedResults', $component->getCollateExtendedResults());
$request->addParam('spellcheck.accuracy', $component->getAccuracy());
return $request;
}
}
\ No newline at end of file
<?php
/**
* Copyright 2011 Bas de Nooijer. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this listof conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are
* those of the authors and should not be interpreted as representing official
* policies, either expressed or implied, of the copyright holder.
*
* @copyright Copyright 2011 Bas de Nooijer <solarium@raspberry.nl>
* @license http://github.com/basdenooijer/solarium/raw/master/COPYING
* @link http://www.solarium-project.org/
*
* @package Solarium
* @subpackage Client
*/
/**
* Parse select component Highlighting result from the data
*
* @package Solarium
* @subpackage Client
*/
class Solarium_Client_ResponseParser_Select_Component_Spellcheck
{
/**
* Parse result data into result objects
*
* @param Solarium_Query_Select $query
* @param Solarium_Query_Select_Component_Spellcheck $spellcheck
* @param array $data
* @return Solarium_Result_Select_Spellcheck
*/
public function parse($query, $spellcheck, $data)
{
$results = array();
if (isset($data['spellcheck'])) {
$spellcheckResults = $data['spellcheck'];
foreach ($spellcheckResults AS $key => $result) {
$results[$key] = new Solarium_Result_Select_Spellcheck_Result(
$result
);
}
}
return new Solarium_Result_Select_Spellcheck($results);
}
}
\ No newline at end of file
......@@ -79,6 +79,11 @@ class Solarium_Query_Select extends Solarium_Query
*/
const COMPONENT_HIGHLIGHTING = 'highlighting';
/**
* Query component spellcheck
*/
const COMPONENT_SPELLCHECK = 'spellcheck';
/**
* Query component grouping
*/
......@@ -140,6 +145,11 @@ class Solarium_Query_Select extends Solarium_Query
'requestbuilder' => 'Solarium_Client_RequestBuilder_Select_Component_Grouping',
'responseparser' => 'Solarium_Client_ResponseParser_Select_Component_Grouping',
),
self::COMPONENT_SPELLCHECK => array(
'component' => 'Solarium_Query_Select_Component_Spellcheck',
'requestbuilder' => 'Solarium_Client_RequestBuilder_Select_Component_Spellcheck',
'responseparser' => 'Solarium_Client_ResponseParser_Select_Component_Spellcheck',
),
);
/**
......@@ -834,4 +844,16 @@ class Solarium_Query_Select extends Solarium_Query
return $this->getComponent(Solarium_Query_Select::COMPONENT_GROUPING, true);
}
/*
* Get a spellcheck component instance
*
* This is a convenience method that maps presets to getComponent
*
* @return Solarium_Query_Select_Component_Spellcheck
*/
public function getSpellcheck()
{
return $this->getComponent(Solarium_Query_Select::COMPONENT_SPELLCHECK, true);
}
}
\ No newline at end of file
<?php
/**
* Copyright 2011 Bas de Nooijer. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this listof conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are
* those of the authors and should not be interpreted as representing official
* policies, either expressed or implied, of the copyright holder.
*
* @copyright Copyright 2011 Bas de Nooijer <solarium@raspberry.nl>
* @license http://github.com/basdenooijer/solarium/raw/master/COPYING
* @link http://www.solarium-project.org/
*
* @package Solarium
* @subpackage Query
*/
/**
* Spellcheck component
*
* @link http://wiki.apache.org/solr/SpellCheckComponent
*
* @package Solarium
* @subpackage Query
*/
class Solarium_Query_Select_Component_Spellcheck extends Solarium_Query_Select_Component
{
/**
* Component type
*
* @var string
*/
protected $_type = Solarium_Query_Select::COMPONENT_SPELLCHECK;
/**
* Set query option
*
* Query to spellcheck
*
* @param string $query
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setQuery($query)
{
return $this->_setOption('query', $query);
}
/**
* Get query option
*
* @return string|null
*/
public function getQuery()
{
return $this->getOption('query');
}
/**
* Set build option
*
* Build the spellcheck?
*
* @param string $build
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setBuild($build)
{
return $this->_setOption('build', $build);
}
/**
* Get build option
*
* @return string|null
*/
public function getBuild()
{
return $this->getOption('build');
}
/**
* Set reload option
*
* Reload the dictionary?
*
* @param string $reload
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setReload($reload)
{
return $this->_setOption('reload', $reload);
}
/**
* Get fragsize option
*
* @return string|null
*/
public function getReload()
{
return $this->getOption('reload');
}
/**
* Set dictionary option
*
* The name of the dictionary to use
*
* @param string $dictionary
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setDictionary($dictionary)
{
return $this->_setOption('dictionary', $dictionary);
}
/**
* Get dictionary option
*
* @return string|null
*/
public function getDictionary()
{
return $this->getOption('dictionary');
}
/**
* Set count option
*
* The maximum number of suggestions to return
*
* @param int $count
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setCount($count)
{
return $this->_setOption('count', $count);
}
/**
* Get count option
*
* @return int|null
*/
public function getCount()
{
return $this->getOption('count');
}
/**
* Set onlyMorePopular option
*
* Only return suggestions that result in more hits for the query than the existing query
*
* @param string $onlyMorePopular
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setOnlyMorePopular($onlyMorePopular)
{
return $this->_setOption('onlymorepopular', $onlyMorePopular);
}
/**
* Get onlyMorePopular option
*
* @return string|null
*/
public function getOnlyMorePopular()
{
return $this->getOption('onlymorepopular');
}
/**
* Set extendedResults option
*
* @param string $extendedResults
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setExtendedResults($extendedResults)
{
return $this->_setOption('extendedresults', $extendedResults);
}
/**
* Get extendedResults option
*
* @return string|null
*/
public function getExtendedResults()
{
return $this->getOption('extendedresults');
}
/**
* Set collate option
*
* @param string $collate
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setCollate($collate)
{
return $this->_setOption('collate', $collate);
}
/**
* Get collate option
*
* @return string|null
*/
public function getCollate()
{
return $this->getOption('collate');
}
/**
* Set maxCollations option
*
* @param int $maxCollations
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setMaxCollations($maxCollations)
{
return $this->_setOption('maxcollations', $maxCollations);
}
/**
* Get maxCollations option
*
* @return int|null
*/
public function getMaxCollations()
{
return $this->getOption('maxcollations');
}
/**
* Set maxCollationTries option
*
* @param string $maxCollationTries
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setMaxCollationTries($maxCollationTries)
{
return $this->_setOption('maxcollationtries', $maxCollationTries);
}
/**
* Get maxCollationTries option
*
* @return string|null
*/
public function getMaxCollationTries()
{
return $this->getOption('maxcollationtries');
}
/**
* Set maxCollationEvaluations option
*
* @param int $maxCollationEvaluations
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setMaxCollationEvaluations($maxCollationEvaluations)
{
return $this->_setOption('maxcollationevaluations', $maxCollationEvaluations);
}
/**
* Get maxCollationEvaluations option
*
* @return int|null
*/
public function getMaxCollationEvaluations()
{
return $this->getOption('maxcollationevaluations');
}
/**
* Set collateExtendedResults option
*
* @param string $collateExtendedResults
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setCollateExtendedResults($collateExtendedResults)
{
return $this->_setOption('collateextendedresults', $collateExtendedResults);
}
/**
* Get collateExtendedResults option
*
* @return string|null
*/
public function getCollateExtendedResults()
{
return $this->getOption('collateextendedresults');
}
/**
* Set accuracy option
*
* @param float $accuracy
* @return Solarium_Query_Select_Component_Spellcheck Provides fluent interface
*/
public function setAccuracy($accuracy)
{
return $this->_setOption('accuracy', $accuracy);
}
/**
* Get accuracy option
*
* @return float|null
*/
public function getAccuracy()
{
return $this->getOption('accuracy');
}
}
\ No newline at end of file
......@@ -257,4 +257,16 @@ class Solarium_Result_Select extends Solarium_Result_QueryType
{
return $this->getComponent(Solarium_Query_Select::COMPONENT_FACETSET);
}
/**
* Get spellcheck component result
*
* This is a convenience method that maps presets to getComponent
*
* @return Solarium_Result_Select_Spellcheck
*/
public function getSpellcheck()
{
return $this->getComponent(Solarium_Query_Select::COMPONENT_SPELLCHECK);
}
}
\ No newline at end of file
<?php
/**
* Copyright 2011 Bas de Nooijer. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this listof conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are
* those of the authors and should not be interpreted as representing official
* policies, either expressed or implied, of the copyright holder.
*
* @copyright Copyright 2011 Bas de Nooijer <solarium@raspberry.nl>
* @license http://github.com/basdenooijer/solarium/raw/master/COPYING
* @link http://www.solarium-project.org/
*
* @package Solarium
* @subpackage Result
*/
/**
* Select component spellcheck result
*
* @package Solarium
* @subpackage Result
*/
class Solarium_Result_Select_Spellcheck implements IteratorAggregate, Countable
{
/**
* Result array
*
* @var array
*/
protected $_results;
/**
* Constructor
*
* @param array $results
* @return void
*/
public function __construct($results)
{
$this->_results = $results;
}
/**
* Get a result by key
*
* @param mixed $key
* @return Solarium_Result_Select_Highlighting_Result|null
*/
public function getResult($key)
{
if (isset($this->_results[$key])) {
return $this->_results[$key];
} else {
return null;
}
}
/**
* Get all results
*
* @return array
*/
public function getResults()
{
return $this->_results;
}
/**
* IteratorAggregate implementation
*
* @return ArrayIterator
*/
public function getIterator()
{
return new ArrayIterator($this->_results);
}
/**
* Countable implementation
*
* @return int
*/
public function count()
{
return count($this->_results);
}
}
\ No newline at end of file
<?php
/**
* Copyright 2011 Bas de Nooijer. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this listof conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are
* those of the authors and should not be interpreted as representing official
* policies, either expressed or implied, of the copyright holder.
*
* @copyright Copyright 2011 Bas de Nooijer <solarium@raspberry.nl>
* @license http://github.com/basdenooijer/solarium/raw/master/COPYING
* @link http://www.solarium-project.org/
*
* @package Solarium
* @subpackage Result
*/
/**
* Select component spellcheck result item
*
* @package Solarium
* @subpackage Result
*/
class Solarium_Result_Select_Spellcheck_Result implements IteratorAggregate, Countable
{
/**
* Fields array
*
* @var array
*/
protected $_fields;
/**
* Constructor
*
* @param array $fields
* @return void
*/
public function __construct($fields)
{
$this->_fields = $fields;
}
/**
* Get highlights for all fields
*
* @return array
*/
public function getFields()
{
return $this->_fields;
}
/**
* Get highlights for a single field
*
* @return array
*/
public function getField($key)
{
if (isset($this->_fields[$key])) {
return $this->_fields[$key];
} else {
return array();
}
}
/**
* IteratorAggregate implementation
*
* @return ArrayIterator
*/
public function getIterator()
{
return new ArrayIterator($this->_fields);
}
/**
* Countable implementation
*
* @return int
*/
public function count()
{
return count($this->_fields);
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment