コード例 #1
0
 /**
  * Get the list of facets in base to the specified query and filter
  * @gearman = true
  * @rest = false
  * @background = false
  *
  * @param
  *          [in] Entity_FacetRequest facetRequestEntity Facet request entity
  * @param
  *          [out] array FacetGroup
  */
 public function getFacetsList($facetRequestEntity)
 {
     require_once 'class.solr.php';
     // require_once (ROOT_PATH .
     // '/businessLogic/modules/SearchIndexAccess/Solr.php');
     require_once 'entities/FacetGroup.php';
     require_once 'entities/FacetItem.php';
     require_once 'entities/SelectedFacetGroupItem.php';
     require_once 'entities/FacetResult.php';
     /**
      * ***************************************************************
      */
     // get array of selected facet groups
     $facetRequestEntity->selectedFacetsString = str_replace(',,', ',', $facetRequestEntity->selectedFacetsString);
     // remove descriptions of selected facet groups
     $aGroups = explode(',', $facetRequestEntity->selectedFacetsString);
     $aGroups = array_filter($aGroups);
     // remove empty items
     $aSelectedFacetGroups = array();
     foreach ($aGroups as $i => $value) {
         $gi = explode(':::', $value);
         $gr = explode('::', $gi[0]);
         $it = explode('::', $gi[1]);
         // create string for remove condition
         $count = 0;
         $removeCondition = str_replace($value . ',', '', $facetRequestEntity->selectedFacetsString, $count);
         if ($count == 0) {
             $removeCondition = str_replace($value, '', $facetRequestEntity->selectedFacetsString, $count);
         }
         $selectedFacetGroupData = array('selectedFacetGroupName' => $gr[0], 'selectedFacetGroupPrintName' => $gr[1], 'selectedFacetItemName' => $it[0], 'selectedFacetItemPrintName' => $it[1], 'selectedFacetRemoveCondition' => $removeCondition);
         $aSelectedFacetGroups[] = Entity_SelectedFacetGroupItem::createForRequest($selectedFacetGroupData);
     }
     /**
      * ***************************************************************
      */
     // convert request to index request
     // create filters
     $filters = array();
     if (!empty($aSelectedFacetGroups)) {
         // exclude facetFields and facetDates included in filter from the next
         // list of facets
         foreach ($aSelectedFacetGroups as $value) {
             $facetRequestEntity->facetFields = array_diff($facetRequestEntity->facetFields, array($value->selectedFacetGroupName));
             $facetRequestEntity->facetDates = array_diff($facetRequestEntity->facetDates, array($value->selectedFacetGroupName));
         }
         // $facetFields = array_diff($facetFields,
         // $facetInterfaceRequestEntity->selectedFacetGroups);
         // $facetDates = array_diff($facetDates,
         // $facetInterfaceRequestEntity->selectedFacetGroups);
         foreach ($aSelectedFacetGroups as $group) {
             $filters[] = $group->selectedFacetGroupName . ':' . urlencode($group->selectedFacetItemName);
         }
     }
     $facetRequestEntity->filters = $filters;
     $solr = new BpmnEngine_SearchIndexAccess_Solr($this->_solrIsEnabled, $this->_solrHost);
     // create list of facets
     $facetsList = $solr->getFacetsList($facetRequestEntity);
     $numFound = $facetsList->response->numFound;
     $facetCounts = $facetsList->facet_counts;
     $facetGroups = array();
     // convert facet fields result to objects
     /**
      * *********************************************************************
      */
     // include facet field results
     $facetFieldsResult = $facetsList->facet_counts->facet_fields;
     if (!empty($facetFieldsResult)) {
         foreach ($facetFieldsResult as $facetGroup => $facetvalues) {
             if (count($facetvalues) > 0) {
                 $data = array('facetGroupName' => $facetGroup);
                 $data['facetGroupPrintName'] = $facetGroup;
                 $data['facetGroupType'] = 'field';
                 $facetItems = array();
                 for ($i = 0; $i < count($facetvalues); $i += 2) {
                     $dataItem = array();
                     $dataItem['facetName'] = $facetvalues[$i];
                     $dataItem['facetPrintName'] = $facetvalues[$i];
                     $dataItem['facetCount'] = $facetvalues[$i + 1];
                     $dataItem['facetSelectCondition'] = $facetRequestEntity->selectedFacetsString . (empty($facetRequestEntity->selectedFacetsString) ? '' : ',') . $data['facetGroupName'] . '::' . $data['facetGroupPrintName'] . ':::' . $dataItem['facetName'] . '::' . $dataItem['facetPrintName'];
                     $newFacetItem = Entity_FacetItem::createForInsert($dataItem);
                     $facetItems[] = $newFacetItem;
                 }
                 $data['facetItems'] = $facetItems;
                 $newFacetGroup = Entity_FacetGroup::createForInsert($data);
                 $facetGroups[] = $newFacetGroup;
             }
         }
     }
     /**
      * *********************************************************************
      */
     // include facet date ranges results
     $facetDatesResult = $facetsList->facet_counts->facet_dates;
     if (!empty($facetDatesResult)) {
         foreach ($facetDatesResult as $facetGroup => $facetvalues) {
             if (count((array) $facetvalues) > 3) {
                 $data = array('facetGroupName' => $facetGroup);
                 $data['facetGroupPrintName'] = $facetGroup;
                 $data['facetGroupType'] = 'daterange';
                 $facetItems = array();
                 $facetvalueskeys = array_keys((array) $facetvalues);
                 foreach ($facetvalueskeys as $i => $k) {
                     if ($k != 'gap' && $k != 'start' && $k != 'end') {
                         $dataItem = array();
                         if ($i < count($facetvalueskeys) - 4) {
                             $dataItem['facetName'] = '[' . $k . '%20TO%20' . $facetvalueskeys[$i + 1] . ']';
                             $dataItem['facetPrintName'] = '[' . $k . '%20TO%20' . $facetvalueskeys[$i + 1] . ']';
                         } else {
                             // the last group
                             $dataItem['facetName'] = '[' . $k . '%20TO%20' . $facetvalues->end . ']';
                             $dataItem['facetPrintName'] = '[' . $k . '%20TO%20' . $facetvalues->end . ']';
                         }
                         $dataItem['facetCount'] = $facetvalues->{$k};
                         $dataItem['facetSelectCondition'] = $facetRequestEntity->selectedFacetsString . (empty($facetRequestEntity->selectedFacetsString) ? '' : ',') . $data['facetGroupName'] . '::' . $data['facetGroupPrintName'] . ':::' . $dataItem['facetName'] . '::' . $dataItem['facetPrintName'];
                         $newFacetItem = Entity_FacetItem::createForInsert($dataItem);
                         $facetItems[] = $newFacetItem;
                     }
                 }
                 $data['facetItems'] = $facetItems;
                 $newFacetGroup = Entity_FacetGroup::createForInsert($data);
                 $facetGroups[] = $newFacetGroup;
             }
         }
     }
     // TODO:convert facet queries
     // -----
     /**
      * ***************************************************************
      */
     // Create a filter string used in the filter of results of a datatable
     $filterText = '';
     // the list of selected filters used for filtering result,
     // send in ajax
     foreach ($aSelectedFacetGroups as $selectedFacetGroup) {
         $filterText .= $selectedFacetGroup->selectedFacetGroupName . ':' . urlencode($selectedFacetGroup->selectedFacetItemName) . ',';
     }
     $filterText = substr_replace($filterText, '', -1);
     // $filterText = ($filterText == '')?'':'&filterText='.$filterText;
     /**
      * ***************************************************************
      */
     // Create result
     $dataFacetResult = array('aFacetGroups' => $facetGroups, 'aSelectedFacetGroups' => $aSelectedFacetGroups, 'sFilterText' => $filterText);
     $facetResult = Entity_FacetResult::createForRequest($dataFacetResult);
     return $facetResult;
 }