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)); }
/** * @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; } }