Helix Core is now P4. Product user interfaces will be updated soon. Learn more >>

P4 Search Documentation | 2025.6

# 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

Your search for returned results