Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add query_response_hit_ids and query_response_id to schema version 1.3.0 #34

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
add query_respnse_hit_ids and query_response_id to schema version 1.3.0
Signed-off-by: wrigleyDan <dwrigley@opensourceconnections.com>
wrigleyDan committed Jan 22, 2025
commit 2dff67b220873699e76577c7df8e49a895ef98c6
1,765 changes: 1,765 additions & 0 deletions docs/html/1.3.0/event.schema.html

Large diffs are not rendered by default.

566 changes: 566 additions & 0 deletions docs/html/1.3.0/query.request.schema.html

Large diffs are not rendered by default.

157 changes: 157 additions & 0 deletions docs/html/1.3.0/query.response.schema.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@


<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Overpass:300,400,600,800">
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<link rel="stylesheet" type="text/css" href="schema_doc.css">
<script src="https://use.fontawesome.com/facf9fa52c.js"></script>
<script src="schema_doc.min.js"></script>
<meta charset="utf-8"/>


<title>Query Response When Using UBI</title>
</head>
<body onload="anchorOnLoad();" id="root"><div class="text-right">
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target=".collapse:not(.show)" aria-expanded="false">Expand all</button>
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target=".collapse.show" aria-expanded="false">Collapse all</button>
</div>

<div class="breadcrumbs"></div> <h1>Query Response When Using UBI</h1><span class="badge badge-dark value-type">Type: object</span><br/>
<span class="description"><p>Version 1.3.0; last updated 2025-01-22. The response to a query made by a user should support this schema.</p>
</span>






<div class="accordion" id="accordionquery_id">
<div class="card">
<div class="card-header" id="headingquery_id">
<h2 class="mb-0">
<button class="btn btn-link property-name-button" type="button" data-toggle="collapse" data-target="#query_id"
aria-expanded="" aria-controls="query_id" onclick="setAnchor('#query_id')"><span class="property-name">query_id</span> <span class="badge badge-warning required-property">Required</span></button>
</h2>
</div>

<div id="query_id"
class="collapse property-definition-div" aria-labelledby="headingquery_id"
data-parent="#accordionquery_id">
<div class="card-body pl-5">

<div class="breadcrumbs">root
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-arrow-right-short" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"
/>
</svg>
<a href="#query_id" onclick="anchorLink('query_id')">query_id</a></div><br/>
<span class="description"><p>The unique identifier of a query, typically a UUID, but can be any string.</p>
</span><div class="one-of-value" id="query_id_oneOf"><h2 class="handle">
<label>One of</label>
</h2><ul class="nav nav-tabs" id="tabsquery_id_oneOf_oneOf" role="tablist"><li class="nav-item">
<a class="nav-link active oneOf-option"
id="query_id_oneOf_i0" data-toggle="tab" href="#tab-pane_query_id_oneOf_i0" role="tab"
onclick="setAnchor('#query_id_oneOf_i0')"
>Option 1</a>
</li><li class="nav-item">
<a class="nav-link oneOf-option"
id="query_id_oneOf_i1" data-toggle="tab" href="#tab-pane_query_id_oneOf_i1" role="tab"
onclick="setAnchor('#query_id_oneOf_i1')"
>Option 2</a>
</li></ul>
<div class="tab-content card"><div class="tab-pane fade card-body active show"
id="tab-pane_query_id_oneOf_i0" role="tabpanel">


<div class="breadcrumbs">root
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-arrow-right-short" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"
/>
</svg>
<a href="#query_id" onclick="anchorLink('query_id')">query_id</a>
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-arrow-right-short" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"
/>
</svg>
<a href="#query_id_oneOf" onclick="anchorLink('query_id_oneOf')">oneOf</a>
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-arrow-right-short" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"
/>
</svg>
<a href="#query_id_oneOf_i0" onclick="anchorLink('query_id_oneOf_i0')">item 0</a></div><span class="badge badge-dark value-type">Type: string</span><span class="badge badge-info value-type">Format: uuid</span><br/>






<br/>
<div class="badge badge-secondary">Example:</div>
<br/><div id="query_id_oneOf_i0_ex1" class="jumbotron examples"><div class="highlight"><pre><span></span><span class="s2">&quot;00112233-4455-6677-8899-aabbccddeeff&quot;</span>
</pre></div>
</div>
</div><div class="tab-pane fade card-body "
id="tab-pane_query_id_oneOf_i1" role="tabpanel">


<div class="breadcrumbs">root
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-arrow-right-short" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"
/>
</svg>
<a href="#query_id" onclick="anchorLink('query_id')">query_id</a>
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-arrow-right-short" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"
/>
</svg>
<a href="#query_id_oneOf" onclick="anchorLink('query_id_oneOf')">oneOf</a>
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-arrow-right-short" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"
/>
</svg>
<a href="#query_id_oneOf_i1" onclick="anchorLink('query_id_oneOf_i1')">item 1</a></div><span class="badge badge-dark value-type">Type: string</span><br/>




<p><span class="badge badge-light restriction max-length-restriction" id="query_id_oneOf_i1_maxLength">Must be at most <code>100</code> characters long</span></p>

<br/>
<div class="badge badge-secondary">Example:</div>
<br/><div id="query_id_oneOf_i1_ex1" class="jumbotron examples"><div class="highlight"><pre><span></span><span class="s2">&quot;1234-user-5678&quot;</span>
</pre></div>
</div>
</div></div></div>






</div>
</div>
</div>
</div>

<footer>
<p class="generated-by-footer">Generated using <a href="https://github.com/coveooss/json-schema-for-humans">json-schema-for-humans</a> on 2025-01-22 at 10:50:37 +0100</p>
</footer></body>
</html>
181 changes: 181 additions & 0 deletions docs/html/1.3.0/schema_doc.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
body {
font: 16px/1.5em "Overpass", "Open Sans", Helvetica, sans-serif;
color: #333;
font-weight: 300;
padding: 40px;
}

.btn.btn-link {
font-size: 18px;
user-select: text;
}

.jsfh-animated-property {
animation: eclair;
animation-iteration-count: 1;
animation-fill-mode: forwards;
animation-duration: .75s;

}

@keyframes eclair {
0%,100% {
transform: scale(1);
}
50% {
transform: scale(1.03);
}
}

.btn.btn-primary {
margin: 10px;
}

.btn.example-show.collapsed:before {
content: "show"
}

.btn.example-show:before {
content: "hide"
}

.description.collapse:not(.show) {
max-height: 100px !important;
overflow: hidden;

display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}

.description.collapsing {
min-height: 100px !important;
}

.collapse-description-link.collapsed:after {
content: '+ Read More';
}

.collapse-description-link:not(.collapsed):after {
content: '- Read Less';
}

.badge {
font-size: 100%;
margin-bottom: 0.5rem;
margin-top: 0.5rem;
}

.badge.value-type {
font-size: 120%;
margin-right: 5px;
margin-bottom: 10px;
}


.badge.default-value {
font-size: 120%;
margin-left: 5px;
margin-bottom: 10px;
}

.badge.restriction {
display: inline-block;
}

.badge.required-property,.badge.deprecated-property,.badge.pattern-property,.badge.no-additional {
font-size: 100%;
margin-left: 10px;
}

.accordion div.card:only-child {
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
}

.examples {
padding: 1rem !important;
}

.examples pre {
margin-bottom: 0;
}

.highlight.jumbotron {
padding: 1rem !important;
}

.generated-by-footer {
margin-top: 1em;
text-align: right;
}

/* From https://github.com/richleland/pygments-css/blob/master/friendly.css, see https://github.com/trentm/python-markdown2/wiki/fenced-code-blocks */
.highlight { background: #e9ecef; } /* Changed from #f0f0f0 in the original style to be the same as bootstrap's jumbotron */
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #60a0b0; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #60a0b0; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #007020 } /* Comment.Preproc */
.highlight .cpf { color: #60a0b0; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
.highlight .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #902000 } /* Keyword.Type */
.highlight .m { color: #40a070 } /* Literal.Number */
.highlight .s { color: #4070a0 } /* Literal.String */
.highlight .na { color: #4070a0 } /* Name.Attribute */
.highlight .nb { color: #007020 } /* Name.Builtin */
.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
.highlight .no { color: #60add5 } /* Name.Constant */
.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #007020 } /* Name.Exception */
.highlight .nf { color: #06287e } /* Name.Function */
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #bb60d5 } /* Name.Variable */
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #40a070 } /* Literal.Number.Bin */
.highlight .mf { color: #40a070 } /* Literal.Number.Float */
.highlight .mh { color: #40a070 } /* Literal.Number.Hex */
.highlight .mi { color: #40a070 } /* Literal.Number.Integer */
.highlight .mo { color: #40a070 } /* Literal.Number.Oct */
.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
.highlight .sc { color: #4070a0 } /* Literal.String.Char */
.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
.highlight .sx { color: #c65d09 } /* Literal.String.Other */
.highlight .sr { color: #235388 } /* Literal.String.Regex */
.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #06287e } /* Name.Function.Magic */
.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
.highlight .il { color: #40a070 } /* Literal.Number.Integer.Long */
195 changes: 195 additions & 0 deletions schema/1.3.0/event.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://o19s.github.io/ubi/schema/1.3.0/event.schema.json",
"title": "Event tracking for UBI",
"description": "Version 1.3.0; last updated 2025-01-22. An event that occurred, typically in response to a user.",
"type": "object",
"required": ["action_name", "timestamp"],
"properties": {
"application": {
"description": "Name of the application that is integrated with UBI. You can think of application as in a source of search queries. For example, if you have a type ahead and a traditional search UI, then you might have `type-ahead` and `primary-search` as values.",
"type": "string",
"maxLength": 100,
"examples": [
"type-ahead",
"primary-search",
"amazon-shop",
"ABC-microservice",
"doctor-search"
]
},
"action_name": {
"description": "The name of the action that triggered the event. We have a set of common defaults, however you can pass in whatever you want.",
"oneOf": [
{
"type": "string",
"maxLength": 100,
"enum": ["click_through", "add_to_cart", "click", "watch", "view", "purchase", "impression"]
},
{
"type": "string",
"maxLength": 100
}
]
},
"query_id": {
"description": "The unique identifier of a query, typically a UUID, but can be any string.",
"oneOf": [
{
"type": "string",
"format": "uuid",
"examples": ["00112233-4455-6677-8899-aabbccddeeff"]
},
{
"type": "string",
"maxLength": 100,
"examples": ["1234-user-5678"]
}
]
},
"session_id": {
"description": "The session of the user creating the interactions. This allows us to correlate the interactions with the other events created by a service that recognizes session IDs. Can be used to track unique visits for authenticated and anonymous users.",
"type": "string",
"maxLength": 100,
"examples": ["84266fdbd31d4c2c6d0665f7e8380fa3"]
},
"client_id": {
"description": "The client issuing the query. This could be a unique browser, a microservice that performs searches, a crawling bot.",
"type": "string",
"maxLength": 100,
"examples": ["5e3b2a1c-8b7d-4f2e-a3d4-c9b2e1f3a4b5","quepid-nightly-bot", "BugsBunny::Firefox@0967084"]
},
"user_id": {
"description": "The user ID associated with the person performing the interactions being logged on the site. Can be null/empty in case of an unauthenticated user.",
"type": "string",
"maxLength": 100,
"examples": ["5e3b2a1c-8b7d-4f2e-a3d4-c9b2e1f3a4b5"]
},
"timestamp": {
"description": "When the event took place. This timestamp is formatted according to the ISO 8601 standard. _Please note that Opensearch requires a trailing `Z` or explicit timezone offset._",
"type": "string",
"format": "date-time",
"examples": ["2018-11-13T20:20:39+00:00", "2018-11-13T20:20:39Z", "2018-11-13T20:20:39"]
},
"message_type": {
"description": "Group various `action_name`'s into logical bins.",
"type": "string",
"maxLength": 100,
"examples": ["QUERY", "CONVERSION"],
"$comment": "TDB: action_type? event_type? Should the front end even define this?"
},
"message": {
"description": "Optional text message for the log entry. For example, for a message_type of QUERY, we would expect the text to be about what the user is searching on.",
"type": "string",
"maxLength": 1024
},
"event_attributes": {
"description": "Extensible details about a specific event. A common example of an _Additional Properties_ is the specific identifier of the user (`user_id`). Note: a user identifier is different then the required `client_id` attribute.",
"type": "object",
"additionalProperties": true,
"required": ["position"],
"properties": {
"object": {
"description": "Structure which contains identifying information of the object returned from the query that the user interacts with (i.e.: a book, a product, a post, etc..).",
"type": "object",
"additionalProperties": true,
"required": ["object_id"],
"properties": {
"object_id": {
"description": "The id that a user could look up and find the object instance within the *document corpus*. Examples include: _ssn_, _isbn_, _ean_, etc. Variants need to be incorporated in the `object_id`, so for a t-shirt that is red, you would need SKU level as the `object_id`.",
"examples": ["XYZ-12345", "ISBN 0-061-96436-0", "123"],
"anyOf": [
{
"type": "string",
"maxLength": 256
},
{
"type": "integer"
}
]
},
"object_id_type": {
"description": "The type of the object id that the user is searching for. For a social e-commerce site, these could include product, user, post, comment and so on.",
"oneOf": [
{
"type": "string",
"maxLength": 100,
"enum": ["product", "user", "post", "comment", "video"]
},
{
"type": "string",
"maxLength": 100
}
]
},
"object_id_field":{
"description": "The name of the field that has the id of the objects that will be stored in the backend queries data store. So it you have a query for products and want to save the SKUs, then this might be `sku` and if you are querying for people, maybe this is `ssn`. If you do not provide this value then the default primary identifier in your search index will be used. For example `_id` on OpenSearch. ",
"type": "string",
"maxLength": 100
},
"internal_id": {
"description": "A unique id that the an individual search engine uses internally to index the object via. For example, in OpenSearch, think the `_id` field in the indices.",
"examples": ["1", "123456"],
"anyOf": [
{
"type": "string",
"maxLength": 256
},
{
"type": "integer"
}
]
}
}
},
"position": {
"description": "Structure that contains information on the location of the event origin, such as screen x,y coordinates, or the nth object out of 10 results.",
"type": "object",
"additionalProperties": true,
"oneOf": [
{
"type": "object",
"properties": {
"ordinal": {
"description": "The nth position of the document on the search results page.",
"type": "object",
"properties": {
"index": {
"description": "The position of the document. For grid layout this would be left to right, ignoring wrapping.",
"type": "integer",
"examples": [1, 3, 24]
}
},
"required": ["index"]
}
},
"required": ["ordinal"]
},
{
"type": "object",
"properties": {
"xy": {
"description": "The x,y coordinates on the screen for triggering an event.",
"$comment": "What about bounding boxes?",
"type": "object",
"properties": {
"x": {
"description": "The horizontal location on the page or screen of the event.",
"type": "number"
},
"y": {
"description": "The vertical location on the page or screen of the event.",
"type": "number"
}
},
"required": ["x", "y"]
}
},
"required": ["xy"]
}
]
}
}
}
}
}
77 changes: 77 additions & 0 deletions schema/1.3.0/query.request.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://o19s.github.io/ubi/schema/1.3.0/query.request.schema.json",
"title": "Query Tracking for UBI",
"description": "Version 1.3.0; last updated 2025-01-22. A query made by a user should include these attributes for UBI tracking.",
"type": "object",
"required": [ "user_query" ],
"properties": {
"application": {
"description": "Name of the application that is integrated with UBI. You can think of application as in a source of search queries. For example, if you have a type ahead and a traditional search UI, then you might have `type-ahead` and `primary-search` as values.",
"type": "string",
"maxLength": 100,
"examples": [
"type-ahead",
"primary-search",
"amazon-shop",
"ABC-microservice",
"doctor-search"
]
},
"query_id": {
"description": "The unique identifier of a query, typically a UUID, but can be any string.",
"oneOf": [
{
"type": "string",
"format": "uuid",
"examples": ["00112233-4455-6677-8899-aabbccddeeff"]
},
{
"type": "string",
"maxLength": 100,
"examples": ["1234-user-5678"]
}
]
},
"client_id": {
"description": "The client issuing the query. This could be a unique browser, a microservice that performs searches, a crawling bot. If only authenticated users are tracked, then you could use a specific user id here, otherwise you should use something permanent and track user id as an _Additional Property_.",
"type": "string",
"maxLength": 100,
"examples": ["5e3b2a1c-8b7d-4f2e-a3d4-c9b2e1f3a4b5","quepid-nightly-bot", "BugsBunny::Firefox@0967084"]
},
"user_query":{
"description": "The query as the user entered it. No length limit specified.",
"type": "string",
"$comment": "Currently not required to support recommendation systems etc that might not have a user generated query."
},
"query_attributes":{
"description": "Any query modifiers like filter choices or pagination. Other attributes such as experiment identifiers that need to be tracked with the query.",
"type": "object",
"additionalProperties": true
},
"object_id_field":{
"description": "The name of the field that has the id of the objects that will be stored in the backend queries data store. So it you have a query for products and want to save the SKUs, then this might be `sku` and if you are querying for people, maybe this is `ssn`. If you do not provide this value then the default primary identifier in your search index will be used. For example `_id` on OpenSearch. ",
"type": "string",
"maxLength": 100
},
"timestamp": {
"description": "When the query was issued. This timestamp is formatted according to the ISO 8601 standard. In many implementations of the UBI Query plugin the timestamp will be set for you at the time of the query being run. If you are replaying data, or want to track the timezone of the caller specifically, instead of using the search engine's timezone, then you will need to provide the timestamp instead. _Please note that Opensearch requires a trailing `Z` or explicit timezone offset._",
"type": "string",
"format": "date-time",
"examples": ["2018-11-13T20:20:39+00:00", "2018-11-13T20:20:39Z", "2018-11-13T20:20:39"]
},
"query_response_id": {
"description": "The id of the search engine response.",
"type": "string",
"examples": ["5e3b2a1c-8b7d-4f2e-a3d4-c9b2e1f3a4b5", "00112233-4455-6677-8899-aabbccddeeff"]
},
"query_response_hit_ids": {
"description": "The ids of the documents that were returned by the search engine for this query in the order they were returned.",
"type": "array",
"items": {
"type": "string"
},
"examples": [["B07XLFYN6S", "B013UFPODY", "B07SHS91DQ", "B077FVRM4P", "B07ZCRSVBB", "B07H7RWGRY", "B085XP9ZY5", "B01LW2UNZQ", "B01MQVMFUN", "B08KFPPJ3Y", "B08THXDPVM", "B07V2GZSMS", "B0828XP9RM", "B07G96L41J", "B07V224V9X", "B095LHL2G5", "B083W38C8H", "B06XWPHG53", "B07J4WHNFC", "B071HMM81V"], ["1","2","3","4","5"], []]
}
}
}
25 changes: 25 additions & 0 deletions schema/1.3.0/query.response.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://o19s.github.io/ubi/schema/1.3.0/query.response.schema.json",
"title": "Query Response When Using UBI",
"description": "Version 1.3.0; last updated 2025-01-22. The response to a query made by a user should support this schema.",
"type": "object",
"required": [ "query_id" ],
"properties": {
"query_id": {
"description": "The unique identifier of a query, typically a UUID, but can be any string.",
"oneOf": [
{
"type": "string",
"format": "uuid",
"examples": ["00112233-4455-6677-8899-aabbccddeeff"]
},
{
"type": "string",
"maxLength": 100,
"examples": ["1234-user-5678"]
}
]
}
}
}