Author: david
Date: Mon Feb 20 15:04:02 2012
New Revision: 10947

Log:
Add name access points to QubitSearchPdo.  Add names related by event as well 
as relation for both search classes (fixes issue #2245).

Modified:
   trunk/lib/QubitSearch.class.php
   trunk/lib/QubitSearchPdo.class.php

Modified: trunk/lib/QubitSearch.class.php
==============================================================================
--- trunk/lib/QubitSearch.class.php     Mon Feb 20 12:52:50 2012        (r10946)
+++ trunk/lib/QubitSearch.class.php     Mon Feb 20 15:04:02 2012        (r10947)
@@ -609,10 +609,7 @@
     $doc->addField($placeField);
 
     // Names
-    $nameField = Zend_Search_Lucene_Field::Unstored('name', 
$informationObject->getNameAccessPointsString(array('culture' => $language)));
-    // Boost the hit relevance for the place field
-    $nameField->boost = 3;
-    $doc->addField($nameField);
+    $doc = self::addNameAccessPoints($doc, $informationObject->id, $language);
 
     $cultureInfo = sfCultureInfo::getInstance($language);
     $languages = $cultureInfo->getLanguages();
@@ -764,4 +761,78 @@
 
     return $doc;
   }
+
+  protected static function addNameAccessPoints($doc, $informationObjectId, 
$culture)
+  {
+    $names = array();
+
+    // Subject relations
+    if (!isset(self::$statements['actorRelation']))
+    {
+      $sql  = 'SELECT
+                  i18n.authorized_form_of_name as name';
+      $sql .= ' FROM '.QubitActor::TABLE_NAME.' actor';
+      $sql .= ' JOIN '.QubitActorI18n::TABLE_NAME.' i18n
+                  ON actor.id = i18n.id';
+      $sql .= ' JOIN '.QubitRelation::TABLE_NAME.' relation
+                  ON actor.id = relation.object_id';
+      $sql .= ' WHERE i18n.culture = :culture
+                  AND relation.subject_id = :resourceId
+                  AND relation.type_id = :typeId';
+
+      self::$statements['actorRelation'] = self::$conn->prepare($sql);
+    }
+
+    self::$statements['actorRelation']->execute(array(
+      ':culture' => $culture,
+      ':resourceId' => $informationObjectId,
+      ':typeId' => QubitTerm::NAME_ACCESS_POINT_ID));
+
+    foreach (self::$statements['actorRelation']->fetchAll(PDO::FETCH_OBJ) as 
$item)
+    {
+      if (!in_array($item->name, $names))
+      {
+        $names[] = $item->name;
+      }
+    }
+
+    // Event relation
+    if (!isset(self::$statements['actorEvent']))
+    {
+      $sql  = 'SELECT
+                  i18n.authorized_form_of_name as name';
+      $sql .= ' FROM '.QubitActor::TABLE_NAME.' actor';
+      $sql .= ' JOIN '.QubitActorI18n::TABLE_NAME.' i18n
+                  ON actor.id = i18n.id';
+      $sql .= ' JOIN '.QubitEvent::TABLE_NAME.' event
+                  ON actor.id = event.actor_id';
+      $sql .= ' WHERE i18n.culture = :culture
+                  AND event.information_object_id = :resourceId';
+
+      self::$statements['actorEvent'] = self::$conn->prepare($sql);
+    }
+
+    self::$statements['actorEvent']->execute(array(
+      ':culture' => $culture,
+      ':resourceId' => $informationObjectId));
+
+    foreach (self::$statements['actorEvent']->fetchAll(PDO::FETCH_OBJ) as 
$item)
+    {
+      if (!in_array($item->name, $names))
+      {
+        $names[] = $item->name;
+      }
+    }
+
+    if (0 < count($names))
+    {
+      $field = Zend_Search_Lucene_Field::Unstored('name', implode(' ', 
$names));
+
+      // Boost the hit relevance for the place field
+      $field->boost = 3;
+      $doc->addField($field);
+    }
+
+    return $doc;
+  }
 }

Modified: trunk/lib/QubitSearchPdo.class.php
==============================================================================
--- trunk/lib/QubitSearchPdo.class.php  Mon Feb 20 12:52:50 2012        (r10946)
+++ trunk/lib/QubitSearchPdo.class.php  Mon Feb 20 15:04:02 2012        (r10947)
@@ -347,16 +347,13 @@
     // SUBJECT AND PLACE ACCESS POINTS
     $doc = self::addSubjectsAndPlaces($doc, $resource->id, $resource->culture);
 
+    // NAME ACCESS POINTS
+    $doc = self::addNameAccessPoints($doc, $resource->id, $resource->culture);
+
     self::getInstance()->getEngine()->getIndex()->addDocument($doc);
 
     return;
 
-    // Names
-    $nameField = Zend_Search_Lucene_Field::Unstored('name', 
$resource->getNameAccessPointsString(array('culture' => $language)));
-    // Boost the hit relevance for the place field
-    $nameField->boost = 3;
-    $doc->addField($nameField);
-
     $cultureInfo = sfCultureInfo::getInstance($language);
     $languages = $cultureInfo->getLanguages();
     $scripts = $cultureInfo->getScripts();

-- 
You received this message because you are subscribed to the Google Groups 
"Qubit Toolkit Commits" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/qubit-commits?hl=en.

Reply via email to