示例#1
0
 public function getIndexingFragment($pm_content, $pa_options)
 {
     if (is_array($pm_content)) {
         $pm_content = serialize($pm_content);
     }
     return parent::getIndexingFragment((int) $pm_content, $pa_options);
 }
示例#2
0
 public function getIndexingFragment($pm_content, $pa_options)
 {
     if (is_array($pm_content)) {
         $pm_content = serialize($pm_content);
     }
     if ($pm_content == '') {
         return parent::getIndexingFragment($pm_content, $pa_options);
     }
     $va_return = array();
     $o_geocode_parser = new \GeocodeAttributeValue();
     $va_return[$this->getTableName() . '/' . $this->getElementCode() . '_text'] = $pm_content;
     //@see https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-geo-shape-type.html
     if ($va_coords = $o_geocode_parser->parseValue($pm_content, array())) {
         // Features and points within features are delimited by : and ; respectively. We have to break those apart first.
         if (isset($va_coords['value_longtext2']) && $va_coords['value_longtext2']) {
             $va_points = preg_split("[\\:\\;]", $va_coords['value_longtext2']);
             // fun fact: ElasticSearch expects GeoJSON -- which has pairs of longitude, latitude.
             // google maps and others usually return latitude, longitude, which is also what we store
             if (sizeof($va_points) == 1) {
                 $va_tmp = explode(',', $va_points[0]);
                 $va_return[$this->getTableName() . '/' . $this->getElementCode()] = array('type' => 'point', 'coordinates' => array((double) $va_tmp[1], (double) $va_tmp[0]));
             } elseif (sizeof($va_points) > 1) {
                 // @todo might want to index as multipolygon to break apart features?
                 $va_coordinates_for_es = array();
                 foreach ($va_points as $vs_point) {
                     $va_tmp = explode(',', $vs_point);
                     $va_coordinates_for_es[] = array((double) $va_tmp[1], (double) $va_tmp[0]);
                 }
                 $va_return[$this->getTableName() . '/' . $this->getElementCode()] = array('type' => 'polygon', 'coordinates' => $va_coordinates_for_es);
             }
         }
     }
     return $va_return;
 }
示例#3
0
 public function getIndexingFragment($pm_content, $pa_options)
 {
     if (is_array($pm_content)) {
         $pm_content = serialize($pm_content);
     }
     if ($pm_content == '') {
         return parent::getIndexingFragment($pm_content, $pa_options);
     }
     // we index lengths as float in meters --that way we can do range searches etc.
     try {
         $o_parsed_length = caParseLengthDimension($pm_content);
         return parent::getIndexingFragment((double) $o_parsed_length->convertTo('METER', 6, 'en_US'), $pa_options);
     } catch (\Exception $e) {
         return array();
     }
 }
示例#4
0
 public function getIndexingFragment($pm_content, $pa_options)
 {
     if (is_array($pm_content)) {
         $pm_content = serialize($pm_content);
     }
     if ($pm_content == '') {
         return parent::getIndexingFragment($pm_content, $pa_options);
     }
     // we index currencys as float number and the 3-char currency code in a separate text field
     $o_curr = new \CurrencyAttributeValue();
     $va_parsed_currency = $o_curr->parseValue($pm_content, array());
     if (is_array($va_parsed_currency) && isset($va_parsed_currency['value_decimal1'])) {
         return array($this->getTableName() . '/' . $this->getElementCode() => $va_parsed_currency['value_decimal1'], $this->getTableName() . '/' . $this->getElementCode() . '_currency' => $va_parsed_currency['value_longtext1']);
     } else {
         return parent::getIndexingFragment($pm_content, $pa_options);
     }
 }