Browse Source

fix #1816 solr too many boolean clauses

bach 1 year ago
parent
commit
1c47278ae5
1 changed files with 13 additions and 8 deletions
  1. 13 8
      web/modules/custom/materio_sapi/src/Controller/Base.php

+ 13 - 8
web/modules/custom/materio_sapi/src/Controller/Base.php

@@ -169,12 +169,13 @@ class Base extends ControllerBase {
       $this->or_query->keys(implode(' ', $this->keys));
     }
 
-    // exclude results from and_query
-    $exclude_and_results_conditions = $this->or_query->createConditionGroup('AND');
-    foreach ($this->results['nids'] as $nid) {
-      $exclude_and_results_conditions->addCondition('nid', $nid, '<>');
-    }
-    $this->or_query->addConditionGroup($exclude_and_results_conditions);
+    // // exclude results from previous and_query
+    // !! trigering solr "too many boolean clauses" error
+    // $exclude_and_results_conditions = $this->or_query->createConditionGroup('AND');
+    // foreach ($this->results['nids'] as $nid) {
+    //   $exclude_and_results_conditions->addCondition('nid', $nid, '<>');
+    // }
+    // $this->or_query->addConditionGroup($exclude_and_results_conditions);
 
     if (preg_match_all('/[WTRPCMFGSO]\d{4}/i', implode(' ', $this->keys), $matches)) {
       // in case we search for material references like W0117
@@ -226,8 +227,12 @@ class Base extends ControllerBase {
     $or_results = $this->or_query->execute();
 
     foreach ($or_results as $result) {
-      $this->results['uuids'][] = $result->getField('uuid')->getValues()[0];
-      $this->results['nids'][] = $result->getField('nid')->getValues()[0];
+      $nid = $result->getField('nid')->getValues()[0];
+      // !! have to remove duplicates instead of $exclude_and_results_conditions (solr too many boolean clauses)
+      if ( !in_array($nid, $this->results['nids']) ) {
+        $this->results['uuids'][] = $result->getField('uuid')->getValues()[0];
+        $this->results['nids'][] = $nid;
+      }
     }
 
     // todo you may like / more like this