瀏覽代碼

fix #1816 solr too many boolean clauses

bach 2 年之前
父節點
當前提交
1c47278ae5
共有 1 個文件被更改,包括 13 次插入8 次删除
  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