- switch to new php_solr version (new getArrayResponse method)

- use EDisMax
master
Gilles Crettenand 11 years ago
parent 270f1892e0
commit 1ff4a48563

@ -27,7 +27,10 @@ class BookSearch
); );
$this->client = new \SolrClient($options); $this->client = new \SolrClient($options);
$this->query = new \SolrQuery(); $this->query = new \SolrDisMaxQuery();
// use the Extended DisMax Query parser
$this->query->useEDisMaxQueryParser();
// most options like search fields, sorting, etc are already set // most options like search fields, sorting, etc are already set
// as default in the Solr config and thus should be set only on a // as default in the Solr config and thus should be set only on a
@ -98,7 +101,7 @@ class BookSearch
$this->query->setRows($count); $this->query->setRows($count);
try { try {
$results = $this->client->query($this->query)->getResponse(); $results = $this->client->query($this->query)->getArrayResponse();
} catch(\SolrClientException $e) { } catch(\SolrClientException $e) {
throw new WebException ("SolrError", $e->getMessage(), -700); throw new WebException ("SolrError", $e->getMessage(), -700);
} }
@ -106,7 +109,7 @@ class BookSearch
$books = array(); $books = array();
if(isset($results['response']['docs']) && is_array($results['response']['docs'])) { if(isset($results['response']['docs']) && is_array($results['response']['docs'])) {
foreach($results['response']['docs'] as $r) { foreach($results['response']['docs'] as $r) {
$books[''.$r->id] = (array) $r; $books[$r['id']] = $r;
} }
} }
@ -124,14 +127,14 @@ class BookSearch
$spelling = array(); $spelling = array();
if(isset($results['spellcheck']['suggestions'])) { if(isset($results['spellcheck']['suggestions'])) {
foreach($results['spellcheck']['suggestions'] as $s) { foreach($results['spellcheck']['suggestions'] as $s) {
$spelling[] = (array) $s; $spelling[] = $s;
} }
} }
$facets = array(); $facets = array();
if(isset($results['facet_counts']['facet_fields'])) { if(isset($results['facet_counts']['facet_fields'])) {
foreach($results['facet_counts']['facet_fields'] as $f => $d) { foreach($results['facet_counts']['facet_fields'] as $f => $d) {
$facets[$f] = (array) $d; $facets[$f] = $d;
} }
} }
@ -150,14 +153,22 @@ class BookSearch
* Return a list of suggested titles for the given text * Return a list of suggested titles for the given text
* @param string $text * @param string $text
* @return array * @return array
* @throws WebException
*/ */
public function suggest($text) { public function suggest($text) {
$this->query->setQuery($text); $this->query->setQuery($text);
$this->query->setStart(0); $this->query->setStart(0);
$this->query->setRows(0); $this->query->setRows(0);
$this->query->setParam('suggest', 'true'); $this->query->setParam('suggest', 'true');
$this->query->setParam('facet', 'false');
$this->query->setParam('hl', 'false');
$this->query->setParam('spellcheck', 'false');
$results = $this->client->query($this->query)->getResponse(); try {
$results = $this->client->query($this->query)->getArrayResponse();
} catch(\SolrClientException $e) {
throw new WebException ("SolrError", $e->getMessage(), -700);
}
$text = mb_strtolower ($text, 'UTF-8'); $text = mb_strtolower ($text, 'UTF-8');
@ -165,14 +176,14 @@ class BookSearch
if(isset($results['suggest'])) { if(isset($results['suggest'])) {
foreach($results['suggest'] as $suggester) { foreach($results['suggest'] as $suggester) {
foreach($suggester[$text]['suggestions'] as $s) { foreach($suggester[$text]['suggestions'] as $s) {
$s->term = strip_tags($s->term); $s['term'] = strip_tags($s['term']);
$pos = strpos(mb_strtolower($s->term, 'UTF-8'), $text); $pos = strpos(mb_strtolower($s['term'], 'UTF-8'), $text);
if($pos !== false) { if($pos !== false) {
// increase weight of proposition that have the words at the beginning // increase weight of proposition that have the words at the beginning
$s->weight += (int) ((1 - $pos / strlen($s->term)) * 100); $s['weight'] += (int) ((1 - $pos / strlen($s['term'])) * 100);
} }
$suggestions[$s->term] = (array) $s; $suggestions[$s['term']] = (array) $s;
} }
} }
} }

Loading…
Cancel
Save