public function handle_request_internal()
 {
     $keyword = $this->_params['keyword'];
     $cityId = $this->_params['cityId'];
     $communities = array();
     // Solr 查询
     $solr = APF_Search_SearchClient::instance('community35');
     $response = $solr->setKeywords($keyword)->addEqualFilter('cityid', $cityId)->addWeightedSearchField('name', 4)->addWeightedSearchField('sub_area_string', 2)->addWeightedSearchField('area_string', 1)->setLimit(0, 20)->fetchResult();
     // 拼装小区结果
     if (isset($response['response']['numFound']) && $response['response']['numFound']) {
         foreach ($response['response']['docs'] as $doc) {
             $doc['areacode'];
             $communities[] = array('commId' => $doc['id'], 'commName' => $doc['name'], 'blockId' => $doc['areacode'], 'blockName' => $doc['sub_area_string'], 'districtId' => substr($doc['areacode'], 0, 8), 'districtName' => $doc['area_string'], 'cityId' => $doc['cityid']);
         }
     }
     $data = array('communities' => $communities);
     return API_Result::create()->ok()->data($data)->toArray();
 }
Beispiel #2
0
 /**
  * 房源移出索引
  *
  * @param $id
  *
  * @throws APF_Search_Exception
  * @throws APF_Search_InputFormatException
  */
 protected function delete($id)
 {
     $searchClient = APF_Search_SearchClient::instance('fyk-prop');
     $searchClient->deleteDocumentsByIds('id', array($id));
 }
Beispiel #3
0
 /**
  * @param APF_Search_SearchClient $solr
  * @param $key
  * @param $filter
  */
 protected function filterBuilder($solr, $key, $filter)
 {
     $op = isset($filter['options'][$key]['op']) ? $filter['options'][$key]['op'] : $filter['default_op'];
     $option = $filter['options'][$key];
     switch ($op) {
         case 'range':
             $solr->addRangeFilter($filter['field'], $option['min'], $option['max'], true, true);
             break;
         case 'eq':
             $solr->addEqualFilter($filter['field'], $option['value']);
             break;
         case 'geo':
             $fieldType = isset($filter['fieldType']) ? $filter['fieldType'] : '';
             switch ($fieldType) {
                 case 'location':
                     $solr->addDistanceCircleFilter($filter['field'], $option['lat'], $option['lng'], $option['value'] / 1000);
                     $solr->addGeodistFuncSort($filter['field'], $option['lat'], $option['lng'], false);
                     break;
             }
             break;
             break;
     }
 }