public function Load() { parent::Load(); $altnames = $this->db->altnames; $socrbase = $this->db->socrbase; $streets = $this->db->streets; /* */ $first = true; $i = 0; while (($data = $this->ReadLine()) !== FALSE) { if ($first) { $first = false; continue; } $arData = array(); if ($i++ % 10000 == 0) { echo $i . '; '; } $id_key = $this->arFieldConformity[Loader::IdField]; $cursor = $altnames->find(array(Loader::OldIdField => $data[$id_key])); foreach ($cursor as $el) { $data[$id_key] = $el[Loader::NewIdField]; break; } foreach ($this->arFieldConformity as $key => $conform) { $arData[$key] = $data[$conform] ? $data[$conform] : null; if ($key == Loader::NameField) { $arData[Loader::NormalizedNameField] = __normalize($arData[$key]); } } $typeShortField = Loader::TypeShortField; $typeField = Loader::TypeField; $cursor = $socrbase->find(array($typeShortField => $arData[$typeShortField])); foreach ($cursor as $type) { $arData[$typeField] = $type[$typeField]; break; } $code = $arData[Loader::IdField]; $arCode = $this->ReadCode($code); $arCodeField = $this->GetCodeField($arCode); $arData[Loader::Bad] = substr($arData[Loader::IdField], -2) != '00'; foreach ($arCodeField as $field => $value) { $arData[$field] = $value; } //$arData = array_slice($arData, 0, 11); $streets->insert($arData); } echo " creating indecies "; $streets->ensureIndex(array(Loader::IdField => 1, "unique" => true, "dropDups" => true), array('background' => true)); $streets->ensureIndex(array(Loader::NormalizedNameField => 1), array('background' => true)); $streets->ensureIndex(array(Loader::CodeRegionField => 1), array('background' => true)); $streets->ensureIndex(array(Loader::CodeDistrictField => 1), array('background' => true)); $streets->ensureIndex(array(Loader::CodeLocalityField => 1), array('background' => true)); $streets->ensureIndex(array(Loader::SortField => 1), array('background' => true)); $streets->ensureIndex(array(Loader::Bad => 1), array('background' => true)); $streets->ensureIndex(array(Loader::NameField => 1), array('background' => true)); $streets->ensureIndex(array(Loader::CodeLocalityField => 1, Loader::CodeRegionField => 1, Loader::CodeDistrictField => 1, Loader::CodeStreetField => 1), array('background' => true)); $streets->ensureIndex(array(Loader::CodeLocalityField => 1, Loader::CodeRegionField => 1, Loader::CodeDistrictField => 1, Loader::Bad => 1, Loader::NormalizedNameField => 1), array('background' => true)); $this->Close(); return true; }
public function Load() { parent::Load(); $altnames = $this->db->altnames; $socrbase = $this->db->socrbase; $regions = $this->db->regions; $district = $this->db->district; $cities = $this->db->cities; $first = true; $i = 0; while (($data = $this->ReadLine()) !== FALSE) { if ($first) { $first = false; continue; } $arData = array(); if ($i++ % 10000 == 0) { echo $i . '; '; } $id_key = $this->arFieldConformity[Loader::IdField]; $cursor = $altnames->find(array(Loader::OldIdField => $data[$id_key])); foreach ($cursor as $el) { $data[$id_key] = $el[Loader::NewIdField]; break; } foreach ($this->arFieldConformity as $key => $conform) { $arData[$key] = $data[$conform] ? $data[$conform] : null; if ($key == Loader::NameField) { $arData[Loader::NormalizedNameField] = __normalize($arData[$key]); } } $typeShortField = Loader::TypeShortField; $typeField = Loader::TypeField; $cursor = $socrbase->find(array($typeShortField => $arData[$typeShortField])); foreach ($cursor as $type) { $arData[$typeField] = $type[$typeField]; break; } $code = $arData[Loader::IdField]; $arCode = $this->ReadCode($code); $arCodeField = $this->GetCodeField($arCode); foreach ($arCodeField as $field => $value) { $arData[$field] = $value; } $sort = 100000; $typeCode = 0; switch ($arData[Loader::TypeShortField]) { case 'г': $sort = 1000; $typeCode = 1; break; case 'городок': $sort = 2000; $typeCode = 1; break; case 'пгт': $sort = 3000; $typeCode = 2; break; case 'п': $sort = 4000; $typeCode = 2; break; case 'дп': $sort = 5000; $typeCode = 2; break; case 'кп': $sort = 6000; $typeCode = 2; break; case 'рп': $sort = 7000; $typeCode = 2; break; case 'с': $sort = 8000; $typeCode = 4; break; case 'д': $sort = 9000; $typeCode = 4; break; case 'ст': $sort = 10000; $typeCode = 4; break; default: $sort = 100000; $typeCode = 4; break; } $arData[Loader::SortField] = $sort; $arData[Loader::TypeCode] = $typeCode; $type = $this->GetType($arCode); // поднимаем выше те города, у которых есть ссылка на район if ($arData[Loader::CodeDistrictField]) { $arData[Loader::SortField] = $arData[Loader::SortField] - 10; } $arData[Loader::Bad] = substr($arData[Loader::IdField], -2) != '00'; switch ($type) { case 1: switch ($arData[Loader::IdField]) { case '7700000000000': // Москва // Москва case '7800000000000': // Санкт-Петербург // Санкт-Петербург case '9900000000000': // Байконур // Байконур case '9200000000000': // Севастополь //$arData = array_slice($arData, 0, 8); $regions->insert($arData); $arData[Loader::CodeDistrictField] = null; $arData[Loader::CodeLocalityField] = null; $arData[Loader::SortField] = 100; $cities->insert($arData); break; case '7800000000001': // Ленинград //$arData = array_slice($arData, 0, 8); $regions->insert($arData); $arData[Loader::CodeDistrictField] = null; $arData[Loader::CodeLocalityField] = null; $arData[Loader::SortField] = 500; $cities->insert($arData); break; default: //$arData = array_slice($arData, 0, 8); $regions->insert($arData); break; } break; case 2: //$arData = array_slice($arData, 0, 9); $district->insert($arData); break; default: switch ($arData[Loader::IdField]) { default: //$arData = array_slice($arData, 0, 10); $arData[Loader::SortField] = $sort; $cities->insert($arData); break; } break; } } echo " creating indecies "; $regions->ensureIndex(array(Loader::IdField => 1), array('background' => true, "unique" => true, "dropDups" => true)); $regions->ensureIndex(array(Loader::NormalizedNameField => 1), array('background' => true)); $regions->ensureIndex(array(Loader::NameField => 1), array('background' => true)); $regions->ensureIndex(array(Loader::CodeRegionField => 1), array('background' => true)); $regions->ensureIndex(array(Loader::Bad => 1), array('background' => true)); $district->ensureIndex(array(Loader::IdField => 1, "unique" => true, "dropDups" => true), array('background' => true)); $district->ensureIndex(array(Loader::NormalizedNameField => 1), array('background' => true)); $district->ensureIndex(array(Loader::NameField => 1), array('background' => true)); $district->ensureIndex(array(Loader::CodeRegionField => 1), array('background' => true)); $district->ensureIndex(array(Loader::SortField => 1), array('background' => true)); $district->ensureIndex(array(Loader::CodeRegionField => 1, Loader::CodeDistrictField => 1), array('background' => true)); $district->ensureIndex(array(Loader::Bad => 1), array('background' => true)); $cities->ensureIndex(array(Loader::IdField => 1, "unique" => true, "dropDups" => true), array('background' => true)); $cities->ensureIndex(array(Loader::NormalizedNameField => 1), array('background' => true)); $cities->ensureIndex(array(Loader::CodeRegionField => 1), array('background' => true)); $cities->ensureIndex(array(Loader::CodeDistrictField => 1), array('background' => true)); $cities->ensureIndex(array(Loader::SortField => 1), array('background' => true)); $cities->ensureIndex(array(Loader::NameField => 1), array('background' => true)); $cities->ensureIndex(array(Loader::TypeCode => 1), array('background' => true)); $cities->ensureIndex(array(Loader::Bad => 1), array('background' => true)); $cities->ensureIndex(array(Loader::CodeDistrictField => 1, Loader::CodeRegionField => 1, Loader::CodeLocalityField => 1), array('background' => true)); // Фиксы странных вещей //Убираем левую Чувашию $regions->update(array('Id' => '2100000000000'), array('$set' => array('CodeRegion' => 21))); // Правим названия у верной Чувашии $regions->update(array('Id' => '2100000000000'), array('$set' => array('Name' => 'Чувашская', 'TypeShort' => 'Респ', 'Type' => 'Республика'))); $this->Close(); return true; }
public function Load() { parent::Load(); $altnames = $this->db->altnames; $buildings = $this->db->buildings; $first = true; $i = 0; while (($data = $this->ReadLine()) !== FALSE) { if ($first) { $first = false; continue; } $arData = array(); if ($i++ % 10000 == 0) { echo $i . '; '; } $id_key = $this->arFieldConformity[Loader::IdField]; $cursor = $altnames->find(array(Loader::OldIdField => $data[$id_key])); foreach ($cursor as $el) { $data[$id_key] = $el[Loader::NewIdField]; break; } foreach ($this->arFieldConformity as $key => $conform) { $arData[$key] = $data[$conform] ? $data[$conform] : null; if ($key == Loader::NameField) { $arData[Loader::NormalizedNameField] = __normalize($arData[$key]); } if ($key == Loader::TypeField) { if ($arData[$key] == 'ДОМ') { $arData[$key] = 'дом'; } } if ($key == Loader::TypeShortField) { if ($arData[$key] == 'ДОМ') { $arData[$key] = 'д'; } } } $code = $arData[Loader::IdField]; $arCode = $this->ReadCode($code); $arCodeField = $this->GetCodeField($arCode); foreach ($arCodeField as $field => $value) { $arData[$field] = $value; } $arData[Loader::ZipCodeField] = intval($arData[Loader::ZipCodeField]); $arData = $this->fixData($arData); $buildings->insert($arData); } echo " Creating indecies "; $buildings->ensureIndex(array(Loader::NormalizedNameField => 1), array('background' => true)); $buildings->ensureIndex(array(Loader::CodeRegionField => 1), array('background' => true)); $buildings->ensureIndex(array(Loader::CodeDistrictField => 1), array('background' => true)); $buildings->ensureIndex(array(Loader::CodeLocalityField => 1), array('background' => true)); $buildings->ensureIndex(array(Loader::CodeStreetField => 1), array('background' => true)); $buildings->ensureIndex(array(Loader::SortField => 1), array('background' => true)); $buildings->ensureIndex(array(Loader::ZipCodeField => 1), array('background' => true)); $buildings->ensureIndex(array(Loader::IdField => 1), array('background' => true, "unique" => true, "dropDups" => true)); $buildings->ensureIndex(array(Loader::NormalizedNameField => 1, Loader::CodeRegionField => 1, Loader::CodeStreetField => 1, Loader::CodeDistrictField => 1, Loader::CodeLocalityField => 1), array('background' => true)); $buildings->ensureIndex(array(Loader::CodeRegionField => 1, Loader::CodeStreetField => 1, Loader::CodeDistrictField => 1, Loader::CodeLocalityField => 1), array('background' => true)); $this->Close(); return true; }