diff --git a/grammar/query.pp b/grammar/query.pp index e8ffeda1c5..a2474a9bd9 100644 --- a/grammar/query.pp +++ b/grammar/query.pp @@ -28,6 +28,8 @@ // Rest %token database database %token collection collection +%token sha256 sha256 +%token uuid uuid %token type type %token id id|recordid %token created_on created_(on|at) @@ -86,6 +88,8 @@ match_key: #native_key: + | + | | | | @@ -169,6 +173,8 @@ keyword: | | | + | + | | | | diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/KeyValue/NativeKey.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/KeyValue/NativeKey.php index 4c25df08e6..e486483b71 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/KeyValue/NativeKey.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/KeyValue/NativeKey.php @@ -8,6 +8,8 @@ class NativeKey implements Key { const TYPE_DATABASE = 'database'; const TYPE_COLLECTION = 'collection'; + const TYPE_SHA256 = 'sha256'; + const TYPE_UUID = 'uuid'; const TYPE_MEDIA_TYPE = 'media_type'; const TYPE_RECORD_IDENTIFIER = 'record_identifier'; @@ -24,6 +26,16 @@ class NativeKey implements Key return new self(self::TYPE_COLLECTION, 'collection_name'); } + public static function sha256() + { + return new self(self::TYPE_SHA256, 'sha256'); + } + + public static function uuid() + { + return new self(self::TYPE_UUID, 'uuid'); + } + public static function mediaType() { return new self(self::TYPE_MEDIA_TYPE, 'type'); diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/RecordIndex.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/RecordIndex.php index 1447c7d8da..f81a8370fa 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/RecordIndex.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/RecordIndex.php @@ -61,8 +61,8 @@ class RecordIndex implements MappingProvider // Collection name (still indexed for facets) $mapping->addStringField('collection_name')->disableAnalysis(); - $mapping->addStringField('uuid')->disableIndexing(); - $mapping->addStringField('sha256')->disableIndexing(); + $mapping->addStringField('uuid')->disableAnalysis(); + $mapping->addStringField('sha256')->disableAnalysis(); $mapping->addStringField('original_name')->disableIndexing(); $mapping->addStringField('mime')->disableAnalysis(); $mapping->addStringField('type')->disableAnalysis(); diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/NodeTypes.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/NodeTypes.php index 6239f32f83..61e935208d 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/NodeTypes.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/NodeTypes.php @@ -34,6 +34,8 @@ class NodeTypes const TOKEN_RAW_STRING = 'raw_quoted'; const TOKEN_DATABASE = 'database'; const TOKEN_COLLECTION = 'collection'; + const TOKEN_SHA256 = 'sha256'; + const TOKEN_UUID = 'uuid'; const TOKEN_MEDIA_TYPE = 'type'; const TOKEN_RECORD_ID = 'id'; const TOKEN_CREATED_ON = 'created_on'; diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/QueryVisitor.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/QueryVisitor.php index 958a949b74..b94ab551a3 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/QueryVisitor.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/QueryVisitor.php @@ -346,6 +346,10 @@ class QueryVisitor implements Visit return AST\KeyValue\NativeKey::database(); case NodeTypes::TOKEN_COLLECTION: return AST\KeyValue\NativeKey::collection(); + case NodeTypes::TOKEN_SHA256: + return AST\KeyValue\NativeKey::sha256(); + case NodeTypes::TOKEN_UUID: + return AST\KeyValue\NativeKey::uuid(); case NodeTypes::TOKEN_MEDIA_TYPE: return AST\KeyValue\NativeKey::mediaType(); case NodeTypes::TOKEN_RECORD_ID: