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(); }