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