#1661 added phrase query before and then or querys of solr search
This commit is contained in:
parent
1c47278ae5
commit
f919dab0e9
|
@ -44,6 +44,44 @@ class Base extends ControllerBase {
|
||||||
'nids' => []
|
'nids' => []
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// PHRASE QUERY
|
||||||
|
// (to match exact materials names (like "wood-skin"))
|
||||||
|
$this->phrase_query = $this->index->query(['offset'=>0,'limit'=>10000]);
|
||||||
|
// set parse mode and conjunction
|
||||||
|
$parse_mode = \Drupal::service('plugin.manager.search_api.parse_mode')
|
||||||
|
->createInstance('phrase');
|
||||||
|
$parse_mode->setConjunction('AND');
|
||||||
|
$this->phrase_query->setParseMode($parse_mode);
|
||||||
|
// Set fulltext search keywords and fields.
|
||||||
|
if ($this->keys) {
|
||||||
|
$this->phrase_query->keys(implode(' ', $this->keys));
|
||||||
|
}
|
||||||
|
$this->phrase_query->setFulltextFields(['title']);
|
||||||
|
|
||||||
|
// Restrict the search to specific languages.
|
||||||
|
$this->phrase_query->setLanguages([$lang]);
|
||||||
|
|
||||||
|
// Do paging.
|
||||||
|
// $this->and_query->range($this->offset, $this->limit);
|
||||||
|
// retrieve all results
|
||||||
|
// $this->and_query->range(0, -1);
|
||||||
|
|
||||||
|
// Add sorting.
|
||||||
|
$this->phrase_query->sort('search_api_relevance', 'DESC');
|
||||||
|
|
||||||
|
// Set one or more tags for the query.
|
||||||
|
// @see hook_search_api_query_TAG_alter()
|
||||||
|
// @see hook_search_api_results_TAG_alter()
|
||||||
|
$this->phrase_query->addTag('materio_sapi_search_phrase_query');
|
||||||
|
|
||||||
|
$phrase_results = $this->phrase_query->execute();
|
||||||
|
|
||||||
|
foreach ($phrase_results as $result) {
|
||||||
|
$this->results['uuids'][] = $result->getField('uuid')->getValues()[0];
|
||||||
|
$this->results['nids'][] = $result->getField('nid')->getValues()[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// AND QUERY
|
// AND QUERY
|
||||||
$this->and_query = $this->index->query(['offset'=>0,'limit'=>10000]);
|
$this->and_query = $this->index->query(['offset'=>0,'limit'=>10000]);
|
||||||
// set parse mode and conjunction
|
// set parse mode and conjunction
|
||||||
|
@ -141,9 +179,14 @@ class Base extends ControllerBase {
|
||||||
$and_results = $this->and_query->execute();
|
$and_results = $this->and_query->execute();
|
||||||
|
|
||||||
foreach ($and_results as $result) {
|
foreach ($and_results as $result) {
|
||||||
|
// !! have to remove duplicates from phrase query
|
||||||
|
$nid = $result->getField('nid')->getValues()[0];
|
||||||
|
if ( !in_array($nid, $this->results['nids']) ) {
|
||||||
$this->results['uuids'][] = $result->getField('uuid')->getValues()[0];
|
$this->results['uuids'][] = $result->getField('uuid')->getValues()[0];
|
||||||
$this->results['nids'][] = $result->getField('nid')->getValues()[0];
|
$this->results['nids'][] = $result->getField('nid')->getValues()[0];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
$this->exactematch_count = count($this->results['nids']);
|
$this->exactematch_count = count($this->results['nids']);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue