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();
 }
 /**
  * 房源移出索引
  *
  * @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));
 }
 public function handle_request_internal()
 {
     $brokerId = isset($this->_params['brokerId']) ? $this->_params['brokerId'] : 0;
     $keyword = isset($this->_params['keyword']) ? $this->_params['keyword'] : '';
     $commId = isset($this->_params['commId']) ? $this->_params['commId'] : 0;
     $cityId = isset($this->_params['cityId']) ? $this->_params['cityId'] : 0;
     $distance = isset($this->_params['distance']) ? $this->_params['distance'] : 0;
     $price = isset($this->_params['price']) ? $this->_params['price'] : 0;
     $rooms = isset($this->_params['rooms']) ? $this->_params['rooms'] : 0;
     $lat = isset($this->_params['lat']) ? floatval($this->_params['lat']) : 0;
     $lng = isset($this->_params['lng']) ? floatval($this->_params['lng']) : 0;
     $page = isset($this->_params['page']) ? $this->_params['page'] : 1;
     $per = isset($this->_params['per']) ? intval($this->_params['per']) : 20;
     $data = array();
     $data['page'] = $page;
     $data['hasNextPage'] = 0;
     $filters = APF::get_instance()->get_config('prop_search_filters', 'fyk_search');
     $props = array();
     if ($cityId == 0) {
         $brokerInfo = Model_Broker_AjkBrokerExtend::findWithBrokerId($brokerId);
         $cityId = $brokerInfo['cityId'];
     }
     // Solr 查询
     $solr = APF_Search_SearchClient::instance('fyk-prop');
     // 在售
     $solr->addEqualFilter('status', Const_Fyk::PROPSTATUS_SELLING);
     if ($cityId) {
         $solr->addEqualFilter('city_id', $cityId);
     }
     // 过滤关键词或小区
     if ($commId) {
         $solr->addEqualFilter('comm_id', $commId);
     } elseif ($keyword) {
         $solr->setKeywords($keyword)->addWeightedSearchField('comm_name', 4)->addWeightedSearchField('block_name', 1)->addWeightedSearchField('district_name', 1);
     }
     // 距离
     if ($distance && isset($filters['distance']['options'][$distance]) && $lat && $lng) {
         $filters['distance']['options'][$distance]['lat'] = (double) $lat;
         $filters['distance']['options'][$distance]['lng'] = (double) $lng;
         $this->filterBuilder($solr, $distance, $filters['distance']);
     }
     // 价钱
     if ($price && isset($filters['price']['options'][$price])) {
         $this->filterBuilder($solr, $price, $filters['price']);
     }
     // 户型
     if ($rooms && isset($filters['rooms']['options'][$rooms])) {
         $this->filterBuilder($solr, $rooms, $filters['rooms']);
     }
     // 分页
     if ($page) {
         $start = ($page - 1) * $per;
         $solr->setLimit($start, $per);
     }
     // 排序
     $solr->addFieldSort('onsell_time', true);
     $response = $solr->fetchResult();
     if (isset($response['response']['numFound']) && $response['response']['numFound']) {
         // 判定下一页
         if ($response['response']['numFound'] > $page * $per) {
             $data['hasNextPage'] = 1;
         }
         // 取房源
         foreach ($response['response']['docs'] as $doc) {
             $prop = array('fPropId' => $doc['id'], 'isOnly' => intval($doc['is_only']), 'isReal' => intval($doc['is_real']), 'certificate' => intval($doc['is_certificate']), 'commId' => $doc['comm_id'], 'commName' => $doc['comm_name'], 'districtId' => $doc['district_id'], 'districtName' => $doc['district_name'], 'blockId' => $doc['block_id'], 'blockName' => $doc['block_name'], 'roomNum' => $doc['room_num'], 'hallNum' => $doc['hall_num'], 'toiletNum' => $doc['toilet_num'], 'area' => $doc['area_num'], 'areaUnit' => '平米', 'price' => intval($doc['price'] / 10000), 'priceUnit' => '万', 'distance' => '', 'distanceUnit' => 'm', 'publishDays' => 0, 'publishDaysMsg' => '');
             // 距离
             if ($distance && isset($filters['distance']['options'][$distance]) && $lat && $lng) {
                 list($propLat, $propLng) = explode(',', $doc['comm_location']);
                 $prop['distance'] = intval(Util_Map::distance($lat, $lng, $propLat, $propLng));
                 if ($prop['distance'] > $distance) {
                     $prop['distance'] = $distance;
                 }
             }
             // 在售时间
             if ($doc['onsell_time']) {
                 $prop['publishDays'] = intval((strtotime(date('Y-m-d 00:00:00')) - strtotime(date('Y-m-d 00:00:00', $doc['onsell_time']))) / 86400);
                 if ($prop['publishDays'] == 0) {
                     $prop['publishDaysMsg'] = '今日发布';
                 } elseif ($prop['publishDays'] == 1) {
                     $prop['publishDaysMsg'] = '昨日发布';
                 } else {
                     $prop['publishDaysMsg'] = "{$prop['publishDays']}日前发布";
                 }
             }
             $props[] = $prop;
         }
     }
     $data['props'] = $props;
     return API_Result::create()->ok()->data($data)->toArray();
 }