diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/FieldMapping.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/FieldMapping.php index b113bc4bfd..076034b7b1 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/FieldMapping.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/FieldMapping.php @@ -26,13 +26,14 @@ class FieldMapping const TYPE_COMPLETION = 'completion'; // Number core types - const TYPE_FLOAT = 'float'; - const TYPE_DOUBLE = 'double'; - const TYPE_INTEGER = 'integer'; - const TYPE_LONG = 'long'; - const TYPE_SHORT = 'short'; - const TYPE_BYTE = 'byte'; - const TYPE_IP = 'ip'; + const TYPE_FLOAT = 'float'; + const TYPE_DOUBLE = 'double'; + const TYPE_INTEGER = 'integer'; + const TYPE_LONG = 'long'; + const TYPE_SHORT = 'short'; + const TYPE_BYTE = 'byte'; + const TYPE_IP = 'ip'; + const TYPE_GEO_POINT = 'geo_point'; // Compound types const TYPE_OBJECT = 'object'; @@ -48,6 +49,7 @@ class FieldMapping self::TYPE_SHORT, self::TYPE_BYTE, self::TYPE_IP, + self::TYPE_GEO_POINT, self::TYPE_OBJECT, self::TYPE_COMPLETION ); diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/MetadataHydrator.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/MetadataHydrator.php index fa695ab8b5..b3b611d301 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/MetadataHydrator.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/MetadataHydrator.php @@ -156,8 +156,17 @@ SQL; $position->set($tag_name, $value); // Try to output complete position if ($position->isComplete()) { - $records[$id]['metadata_tags']['Longitude'] = $position->getSignedLongitude(); - $records[$id]['metadata_tags']['Latitude'] = $position->getSignedLatitude(); + $lon = $position->getSignedLongitude(); + $lat = $position->getSignedLatitude(); + + $records[$id]['metadata_tags']['Longitude'] = $lon; + $records[$id]['metadata_tags']['Latitude'] = $lat; + + $records[$id]["location"] = [ + "lat" => $lat, + "lon" => $lon + ]; + unset($this->gps_position_buffer[$id]); } } diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/RecordIndex.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/RecordIndex.php index a2d287084f..7ed885eec6 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/RecordIndex.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/RecordIndex.php @@ -73,6 +73,8 @@ class RecordIndex implements MappingProvider $mapping->addIntegerField('height')->disableIndexing(); $mapping->addIntegerField('size')->disableIndexing(); + $mapping->addGeoPointField('location')->disableIndexing(); + $mapping->addDateField('created_on', FieldMapping::DATE_FORMAT_MYSQL_OR_CAPTION); $mapping->addDateField('updated_on', FieldMapping::DATE_FORMAT_MYSQL_OR_CAPTION); diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/MappingBuilder.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/MappingBuilder.php index fcc1953bc9..1d7a562e17 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/MappingBuilder.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/MappingBuilder.php @@ -45,6 +45,15 @@ class MappingBuilder return $this->mapping->addField(new FieldMapping($name, FieldMapping::TYPE_INTEGER)); } + /** + * @param string $name + * @return FieldMapping + */ + public function addGeoPointField($name) + { + return $this->mapping->addField(new FieldMapping($name, FieldMapping::TYPE_GEO_POINT)); + } + /** * @param string $name * @return FieldMapping