Data models

P4 Search uses data models to define how different information from P4 Server is indexed and stored in Elasticsearch.

Every data model document has a unique Elasticsearch document ID (_id) in the format <type>-<depotFile>#<rev> except for the ChangeModel, which uses the format <type>-<changeNumber> for its ID. For example, for an AssetModel document, the ID might be asset-//depot/dam/Music Loops/License.txt#1.

You can do a document look-up on Elasticsearch as follows:

GET http://localhost:9200/index-perforce1-000001/_doc/asset-%2f%2fdepot%2fmain%2fp4-perl%2fP4.pm%2329

The Elasticsearch document ID (_id) cannot be larger than 512 bytes.

ChangeModel

One instance of the ChangeModel represents a single change in the P4 Server. The following attributes are stored in Elasticsearch:

Name Description Type
type Fixed string "change" String
change P4 Server change number Long
date Change date Long
client P4 Server client name String
user P4 Server user String
restricted Whether the change is restricted or not Boolean
description Change description String
depotFile Depot file path String

ContentModel

One instance of the ContentModel represents the contents of a single changed file in the P4 Server. The following attributes are stored in Elasticsearch:

Name Description Type
type Fixed string "content" String
depotFile Depot file path String
rev P4 Server revision number Integer
head true if the revision is the head revision Boolean
change P4 Server change number Long
date Change date Long
fileName File name String
fileSize File size in bytes Long
fileType File type, for example: text, binary, symlink, unicode, utf8, utf16. To learn more about file types, see File Types in the P4 CLI Reference String
action P4 Server action, for example: add and edit String
user User that submitted the change String
contentType Content type detected by the Tika library String
content The content of the file indexed by the Tika library. Includes handwriting or any other text String

TagModel

One instance of the TagModel represents a single instance of an auto-detected tag on a file in the P4 Server. The following attributes are stored in Elasticsearch:

Name Description Type
tag Tag name String
confidence Confidence of detection (floating-point value from 0 to 1, where 1 represents 100%) Float
positions Optional: 1 or more x, y points locating the tag within the image. Stored as a floating-point value from top-left (0, 0) to bottom-right (1, 1) List<Point2D.Float>

AssetModel

One instance of the AssetModel represents a P4 DAM asset in the P4 Server. The following attributes are stored in Elasticsearch:

Name Description Type
type Fixed string "asset" String
depotFile Depot file path String
fileName File name String
rev P4 Server revision number Integer
head true if the revision is the head revision Boolean
blur The BlurHash for the image String
blurSize Blur pixel dimensions based on thumbnail/preview String
detected Auto-detected image tags. For <TagModel>, see TagModel List<TagModel>
attributes List of 'key' and 'value' pair of tags List<AttributeModel>
customAttributes Array of 'uuid' and 'value' pairs JsonArray
change P4 Server change number Long
date Change date Long
user User that submitted the change String
fileSize File size in bytes Long
digest MD5sSum of content String
fileType File type String
action P4 Server action, for example: add and edit String
contentType Content type detected by the Tika library String
metadata Metadata found by the Tika library, for example: EXIF metadata and more Map<String, String>
gps GpsModel data extracted from EXIF metadata. See GpsModel GpsModel
dimension 2D image pixel data PixelModel
sceneStats 3D model scene data SceneStatsModel

GpsModel

To view example queries, see Example queries (EXIF data).

One instance of the GpsModel represents one GPS location of a file's content in the P4 Server. The following attributes are stored in Elasticsearch:

Name Description Type
location Elasticsearch compatible location. See Location Location
altitude Altitude in meters Double
bearing Bearing in degrees from north Double

Location

Location is part of GpsModel. One instance of the Location represents one latitude/longitude location. The following attributes are stored in Elasticsearch:

Name Description Type
lat Latitude in decimal Double
lon Longitude in decimal Double

PixelModel

One instance of the PixelModel represents an image's pixel data. The following attributes are stored in Elasticsearch:

Name Description Type
width Width in pixels Integer
height Height in pixels Integer
total Total pixel count Integer
pwr2 true if the height and width are powers of 2 Boolean
totalFrames Total frames in a video Long
duration Duration of a video in milliseconds Long

SceneStatsModel

One instance of the SceneStatsModel represents a 3D model's statistics. The following attributes are stored in Elasticsearch:

Name Description Type
edges Number of edges in all mesh objects Long
faces Number of faces (polygons) in all mesh objects Long
objects Number of objects in the scene Long
triangles Number of triangles in all mesh objects Long
vertices Number of vertices in all mesh objects Long
animations Number of animations in the scene Long
armatures Number of armatures in the scene Long
materials Number of materials in the scene Long
meshes Number of meshes in all objects Long
textures Number of all textures in the scene Long
uv_maps Number of UV maps in the scene Long

(Deprecated) RevisionModel

From the P4 Search 2024.1 release, RevisionModel was deprecated and is no longer indexed.

One instance of the RevisionModel represents a single revision of a file in the P4 Server. The following attributes are stored in Elasticsearch:

Name Description Type
type Fixed string "revision" String
change P4 Server change number Long
date Change date Long
depotFile Depot file path String
action P4 Server action, for example: add and edit String
fileType File type, for example: text, binary, symlink, unicode, utf8, utf16. To learn more about file types, see File Types in the P4 CLI Reference String

rev

P4 Server revision number Integer

fileName

File name String

fileSize

File size in bytes Long

digest

An MD5 digest of the file represented by a 32 hexadecimal digit string String

user

User that submitted the change String