modified custom solr field types, fixed the reference search
This commit is contained in:
parent
dc2b536be3
commit
fa0c70ccd8
|
@ -21,14 +21,14 @@ field_type:
|
||||||
filters:
|
filters:
|
||||||
-
|
-
|
||||||
class: solr.LowerCaseFilterFactory
|
class: solr.LowerCaseFilterFactory
|
||||||
-
|
|
||||||
class: solr.RemoveDuplicatesTokenFilterFactory
|
|
||||||
-
|
-
|
||||||
class: solr.ASCIIFoldingFilterFactory
|
class: solr.ASCIIFoldingFilterFactory
|
||||||
preserveOriginal: true
|
preserveOriginal: true
|
||||||
-
|
-
|
||||||
class: solr.WordDelimiterGraphFilterFactory
|
class: solr.WordDelimiterGraphFilterFactory
|
||||||
preserveOriginal: 1
|
preserveOriginal: 1
|
||||||
|
-
|
||||||
|
class: solr.RemoveDuplicatesTokenFilterFactory
|
||||||
-
|
-
|
||||||
type: query
|
type: query
|
||||||
tokenizer:
|
tokenizer:
|
||||||
|
@ -36,13 +36,13 @@ field_type:
|
||||||
filters:
|
filters:
|
||||||
-
|
-
|
||||||
class: solr.LowerCaseFilterFactory
|
class: solr.LowerCaseFilterFactory
|
||||||
-
|
|
||||||
class: solr.RemoveDuplicatesTokenFilterFactory
|
|
||||||
-
|
-
|
||||||
class: solr.ASCIIFoldingFilterFactory
|
class: solr.ASCIIFoldingFilterFactory
|
||||||
preserveOriginal: true
|
preserveOriginal: true
|
||||||
-
|
-
|
||||||
class: solr.WordDelimiterGraphFilterFactory
|
class: solr.WordDelimiterGraphFilterFactory
|
||||||
preserveOriginal: 1
|
preserveOriginal: 1
|
||||||
|
-
|
||||||
|
class: solr.RemoveDuplicatesTokenFilterFactory
|
||||||
solr_configs: {}
|
solr_configs: {}
|
||||||
text_files: {}
|
text_files: {}
|
||||||
|
|
|
@ -27,6 +27,14 @@ class Base extends ControllerBase {
|
||||||
// https://www.hashbangcode.com/article/drupal-8-date-search-boosting-search-api-and-solr-search
|
// https://www.hashbangcode.com/article/drupal-8-date-search-boosting-search-api-and-solr-search
|
||||||
// https://kgaut.net/blog/2018/drupal-8-search-api-effectuer-une-requete-dans-le-code.html
|
// https://kgaut.net/blog/2018/drupal-8-search-api-effectuer-une-requete-dans-le-code.html
|
||||||
|
|
||||||
|
|
||||||
|
// Otherwise, if you use Solr, you can also set the parse mode to “Direct query”
|
||||||
|
// and use something like 'tm_name:alex AND tm_surname:john' as the keywords (field names may vary).
|
||||||
|
// That will also ensure scoring works for the keywords (the other way just adds filters, which don’t affect scoring).
|
||||||
|
// https://www.drupal.org/project/search_api/issues/3049097
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$lang = \Drupal::languageManager()->getCurrentLanguage()->getId();
|
$lang = \Drupal::languageManager()->getCurrentLanguage()->getId();
|
||||||
|
|
||||||
$this->index = Index::load('database');
|
$this->index = Index::load('database');
|
||||||
|
@ -45,15 +53,7 @@ class Base extends ControllerBase {
|
||||||
$this->and_query->setParseMode($parse_mode);
|
$this->and_query->setParseMode($parse_mode);
|
||||||
// Set fulltext search keywords and fields.
|
// Set fulltext search keywords and fields.
|
||||||
$this->and_query->keys($this->keys);
|
$this->and_query->keys($this->keys);
|
||||||
// $this->and_query->setFulltextFields(['field_reference']);
|
|
||||||
// in case we search for material references like W0117
|
|
||||||
if (preg_match_all('/[WTRPCMFGSO]\d{4}/i', $this->keys, $matches)) {
|
|
||||||
$ref_conditions = $this->and_query->createConditionGroup('OR');
|
|
||||||
foreach ($matches[0] as $key => $value) {
|
|
||||||
$ref_conditions->addCondition('field_reference', $value);
|
|
||||||
}
|
|
||||||
$this->and_query->addConditionGroup($ref_conditions);
|
|
||||||
}
|
|
||||||
// in case of term id provided restrict the keys to taxo fields
|
// in case of term id provided restrict the keys to taxo fields
|
||||||
if ($this->term) {
|
if ($this->term) {
|
||||||
$term_conditions = $this->and_query->createConditionGroup('OR');
|
$term_conditions = $this->and_query->createConditionGroup('OR');
|
||||||
|
@ -72,8 +72,11 @@ class Base extends ControllerBase {
|
||||||
// look @ materio_sapi_search_api_solr_query_alter in materio_sapi.module
|
// look @ materio_sapi_search_api_solr_query_alter in materio_sapi.module
|
||||||
// $this->or_query->setOption('termid', $this->term);
|
// $this->or_query->setOption('termid', $this->term);
|
||||||
}
|
}
|
||||||
// FILTERS
|
|
||||||
|
$fulltextFields = [];
|
||||||
|
|
||||||
if ($this->filters) {
|
if ($this->filters) {
|
||||||
|
// FILTERS
|
||||||
$filters_conditions = $this->and_query->createConditionGroup('AND');
|
$filters_conditions = $this->and_query->createConditionGroup('AND');
|
||||||
foreach ($this->filters as $filter) {
|
foreach ($this->filters as $filter) {
|
||||||
$filter = (int) $filter;
|
$filter = (int) $filter;
|
||||||
|
@ -83,8 +86,8 @@ class Base extends ControllerBase {
|
||||||
}
|
}
|
||||||
$this->and_query->addConditionGroup($filters_conditions);
|
$this->and_query->addConditionGroup($filters_conditions);
|
||||||
}else{
|
}else{
|
||||||
// Recherche uniquement sur le champ « body »
|
// Recherche uniquement sur les champ thésaurus et tag
|
||||||
$this->and_query->setFulltextFields([
|
$fulltextFields += [
|
||||||
'thesaurus_name_0',
|
'thesaurus_name_0',
|
||||||
'thesaurus_synonyms_0',
|
'thesaurus_synonyms_0',
|
||||||
'thesaurus_name_1',
|
'thesaurus_name_1',
|
||||||
|
@ -99,10 +102,12 @@ class Base extends ControllerBase {
|
||||||
'thesaurus_synonyms',
|
'thesaurus_synonyms',
|
||||||
'tag_name',
|
'tag_name',
|
||||||
'tag_synonyms'
|
'tag_synonyms'
|
||||||
]);
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(count($fulltextFields)){
|
||||||
|
$this->and_query->setFulltextFields($fulltextFields);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Restrict the search to specific languages.
|
// Restrict the search to specific languages.
|
||||||
$this->and_query->setLanguages([$lang]);
|
$this->and_query->setLanguages([$lang]);
|
||||||
|
@ -157,6 +162,15 @@ class Base extends ControllerBase {
|
||||||
}
|
}
|
||||||
$this->or_query->addConditionGroup($exclude_and_results_conditions);
|
$this->or_query->addConditionGroup($exclude_and_results_conditions);
|
||||||
|
|
||||||
|
if (preg_match_all('/[WTRPCMFGSO]\d{4}/i', $this->keys, $matches)) {
|
||||||
|
// in case we search for material references like W0117
|
||||||
|
$ref_conditions = $this->or_query->createConditionGroup('OR');
|
||||||
|
foreach ($matches[0] as $key => $value) {
|
||||||
|
$ref_conditions->addCondition('field_reference', $value);
|
||||||
|
}
|
||||||
|
$this->or_query->addConditionGroup($ref_conditions);
|
||||||
|
}
|
||||||
|
|
||||||
// Restrict the search to specific languages.
|
// Restrict the search to specific languages.
|
||||||
$this->or_query->setLanguages([$lang]);
|
$this->or_query->setLanguages([$lang]);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue