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.