Search Webhook
Overview and Integration Principles
Search webhook (previously called Third Node) enables customers to enhance the standard Primo search engine with their own search engine functionality, using the standard Primo services and view.
This webhook allows sites to create multiple search webhooks, where each one is designed to work with a different external search engine (such as Google and EBSCO).
Currently the searches in the search webhook will not support blending with local Primo data nor any additional search webhook plugin.
The following diagram illustrates the search flow when using a search webhook adaptor:
Target Audience
This document applies to content vendors who want to expose their content to Primo users, and it describes the specifications needed to create an API that allows Primo customers to perform searches against an external search webhook.
API Specifications
This section describes the technical requirements needed to implement a search webhook. For the initial setup, you must configure a token in Primo for authorization purposes and enable the search webhook adaptor.
When searching, the general flow is as follows:
- Primo sends a query request to the service’s Rest API.
This request will contain the token configured in the setup phase. - The service should validate the request using the token that was sent in the request.
- If the token is validated, the service returns results to Primo.
Request Definition
Primo specifies a few parameters which required to be implemented by the search service:
Parameter Name | Type | Is Mandatory | Description |
query | String | Yes | The search query The query will be sent in the syntax below |
from | Integer | Yes | Starting point for the pagination capability. Results will be taken starting from this offset. |
bulksize | Integer | Yes | Number of records to take, starting from the from parameter. |
sort | String | Yes | The sorting method for results Results should come sorted by this method (relevance, date, and so forth). Possible values:· scdate – sort by date newest.· screator – sort by author.· stitle – sort by title.· popularity – sort by popularity.· date2 – sort by date oldest.If the sorting method is not specified, the result will be returned in default order (relevance). |
Query Structure
Primo supports search query that has the following structure:
<field>:(<value>) <operator> <field>:(<value>) <operator> ….
field – The data field that you want to search within.
The field is optional and if omitted, results that have the value in any of the fields will be returned.
Examples:
Title:(American History) – query for value ‘American History’ in field ‘Title’ field.
(American History) – query for value ‘American History’ in any field.
The following fields are valid:
title, secondary_title (if you have one), third_title (if you have one), creator (author), sub (subject), desc (description), rtype (resource type), isbn, issn, ftext (fulltext), general, toc (table of content), fmt, lang (language), rectype (record type), dlink (down link), uplink (up link), cdate (creation date),startdate (start date), enddate (end date), sid (source id), rid (record id), addsrcid (addsrcrecordid – see pnx), addtitle, Alttitle, contributor, citation, orcidid, abstract, fiction, local fields.
Advanced Search fields
Primo offers users the option to search records by advanced search.
There are several fields which need to be supported for that kind of search.
Name | Query Field | Description |
Material Type | facet_pfilter | Enables to search records by their media type. The available type options of Primo are (Query Field [Name]):
· books [Books] · journals [Journals] · articles [Articles] · research_datasets [Research Datasets] · technical_reports [Technical Reports] · images [Images] · audio_video [Audio Visual] · databases [Databases] · websites [Web Sites] · scores [Scores] · maps [Maps] · rare_books [Rare Books] · legal_documents [Legal Documents] · reference_entrys [Reference Entries] · statistical_data_sets [Statistical Data_sets] · newspaper_articles [Newspaper Articles] · conference_proceedings [Conference Proceedings] · dissertations [Dissertations] · government_documents [Government Documents] · technical_report [Technical Report] · reviews [Reviews] · patents [Patents]
Example: facet_pfilter:(“journals”) |
Language | facet_lang | Enables to search records by their language. The languages sent are 3-letters codes.
Example: facet_lang:(“eng”) |
Publication Date
| facet_creationdate | Enables to search records of media published last year/last 2 years/last 5 years/last 10 years/ last 20 years. The structure of this field is as following: facet_creationdate:[<YYYY> TO <YYYY>] where ‘YYYY’ is the years.
Example (last 2 years): facet_creationdate:[2017 TO 2019] |
Publication Date | startdate, enddate | Enables to search records of media published between range of two dates. These field be always given in pairs. The structure of this field is as following: <field>:[<date> TO <date>] (like the range format of Lucene) where the date is of the format YYYYMMDD. The way we send these fields values in the query is: enddate:[<starting_date> TO 99999999] AND startdate:[- 99999999 TO <ending_date>] so the results will be in range of <starting_date> – <ending_date>. If starting date in Primo was not chosen, Primo will fill <starting_date> with 00000101 and if ending date in Primo was not chosen, Primo will fill <ending_date> with 99991231. So, for example, if the user searched for records containing a title ‘Sea’ and containing a subject ‘water’ starting from 08-Sep-1992 to 28-Mar-2005, the query will look like this: ((title:(Sea) AND sub:(Water))) AND enddate:[19920908 TO 99999999] AND startdate:[-99999999 TO 20050328] |
Full example of advanced search query (searching for books in French, published in last 5 years, containing title ‘sea’ or exact subject ‘water’):
(title:(sea) OR sub:("water")) AND facet_lang:("fre") AND facet_pfilter:("books") AND facet_creationdate:[2014 TO 2019]
value – The search terms, which can be a word, phrase, or exact phrase (group of words enclosed by quotes), and can include the following logical operators: AND, OR, and NOT
if there is no explicit operator between the terms, AND will be used.
Terms also can be grouped by parenthesis to alter the order of precedence and supports the ‘*’ and ‘?’ wildcards.
Examples:
- (American History) – Querying for strings containing ‘American’ and ‘History’ terms.
- (American AND History) – same as above.
- (American OR History) – Querying for strings containing ‘American’ or ‘History’ terms.
- (“American History”) – Querying for strings containing the exact phrase ‘American History’
Note: exact phrase can be part of other string, that is, when querying for one term there is no difference between exact and contains match.
Primo also supports search by title that starts with a value (prefix query). In this case the value will be enclosed by quotes and include * at the end and the field will be swstitle. Example: swstitle:(“American History*”) – Querying for strings starting with the phrase ‘American History’
For more information and examples of search terms, please see: https://knowledge.exlibrisgroup.com/Primo/Product_Documentation/050New_Primo_User_Interface/End_User_Help_-_New_UI/010Performing_Basic_Searches#Searching_for_a_Phrase
operator – When specifying multiple search fields for advanced searches, this parameter applies the following logical operations between fields: AND (specified values must be found in both fields), OR (specified values must be found in at least one of the fields), NOT (the specified value of the next field must not be found).
Example: in order to search for records with subjects containing the word ‘Sea’ and title starting with the word “Water”, the query will look like:
sub:(Sea) AND title:("Water*")
Note: When using facets, the following query structure for example, should be supported in the search webhook:
((sea)) AND facet_topic:("Bering Sea" OR "Black Sea Region") AND NOT facet_topic:("Chukchi Sea") AND facet_creator:("Bly, R") AND NOT facet_domain:("LINTE")
Full example of service url:
https://<your_host>/<service_path>?token=<configured_token>&query=%28%28sub%253A%28Sea%29%2520AND%2520title%253A%28%2522Water%2A%2522%29%29%29&from=1&bulksize=10&sort=stitle
Response Definition
Note: Each API request is restricted to a maximum of 2000 search results
The results returned to Primo should be in JSON format.
The response should contain a map of the following attributes:
- docs
- facets
- info
docs – contains a list of PNXs, each PNX section contains a map of the relevant pnx sections.
facets – contains a list of maps, each map has name and values, each ‘values’ contain a list of count and value (the facets names should be identical to the ones defined in Primo – please see below the list of the out of the box facets names; For Primo VE – it is taken from the ‘Facets Code Fields Labels’ (the last part of the code)).
info – contains a map of the following attributes: total (=total results count), last (results ending offset), first (results starting offset).
The response should be sent in the following structure:
{
“docs”:
[record_1_PNX (see structure below),
record_2_PNX,
……
record_n_PNX],
“facets”: [
{
“values”: [
{“count”:<count number>, “value”:”<value>”},
{“count”:<count number>, “value”:”<value>”},
…………
]
“name”:”<facet_name>”
},
{
“values”: [
{“count”:<count number>, “value”:”<value>”},
{“count”:<count number>, “value”:”<value>”},
…………
]
“name”:”<facet_name>”
},
………
],
“info”:
{“total”:<total_results_count>,“last”:<results_ending_offset>,”first”:<results_starting_offset>}
}
Record PNX structure
“pnx”:
{
“pnx_section”: {“pnx_field”:[“value”],
“pnx_field”:[“value”]
…. },
“pnx_section”: {“pnx_field”:[“value”],
“pnx_field”:[“value”]
….. },
………..
{
Example of the above structure with possible values:
************************************************
{
“docs”:
[
“pnx”:
{
“control”:
{
“sourceid”:[“WorldCat”],
“recorded”:[“WorldCat1021172652”],
“sourcerecordid”:[“1021172652”],
“sourcesystem”:[“worldcat”]
},
“display”:
{
“type”:[“book”],
“title”:[“ The Pilot : A Tale of the Sea”]
“creator”:[“Cooper, James Fenimore, 1789-1851,”]
“subject”:[“Jones, John Paul, 1747-1792–Fiction. ; Sea stories, American. ; Impressment. ; United States–History–Revolution, 1775-1783–Naval operations–Fiction.”],
“identifier”:[“9788381151504”,”8381151503”],
“source”:[“WorldCat”],
“language”:[“eng”],
“description”:[“An attempt during the Revolutionary War to abduct some Englishmen.”]
},
“delivery”:
{
“fulltext”:[“worldcat”],
“delcategory”:[“Remote Search Resource”],
“fulltext”:[“no_fulltext”]
}
}
],
“facets”:
[
{
“values”:
[
{“count”:1, “value”:”book”},
]
“name”:”rtype”
},
{
“values”:
[
{“count”:1,“value”:“Cooper, James Fenimore, 1789-1851,”},
]
“name”:”creator”
},
……
],
“info”:
{“total”:1,”last”:1,”first”:1}
}
************************************************
Facets Names:
The facets names need to be taken from the “Field Names” field under the “Facets Code Fields” code table in the Primo Back Office (only the part after ‘facet_’).
The out of the box values are:
Field Names: | Fields Codes: |
facet_genre | Genre |
facet_domain | Collection |
facet_topic | Subject |
facet_rtype | Resource Type |
facet_tabs | Tabs |
facet_dcc | Classification DDC |
facet_creator | Author/Creator |
facet_fsize | File Size |
facet_jtitle | Journal Title |
facet_fmt | Format |
facet_pfilter | Pre-Filter |
facet_tlevel | Availability |
facet_rvk | Classification RVK |
facet_lang | Language |
facet_pnxdate | PNX Date |
facet_edition | Edition |
facet_lcc | Classification LCC |
facet_creationdate | Creation Date |
facet_library | Library |
facet_newrecords | New Records |
facet_crsname | Course name |
facet_crsinstrc | Course instructor |
facet_crsid | Course ID |
facet_crsdept | Course department |
facet_rtype_newspapers | Newspapers search |
facet_acadunit | Academic Unit |
facet_dbcategory | DB Category |
facet_local1 | Local Field1 |
facet_local2 | Local Field2 |
…. | |
facet_local50 | Local Field50 |
PNX sections:
There are 3 mandatory sections in each PNX record:
- The Control section – The Control section in the PNX includes formatted data used for control purposes.
- The Display section – The Display section in the PNX includes data used in the brief and full display formats of the UI.
- The Delivery section – The Delivery section in the PNX includes information that Primo requires to configure and manage the delivery of institutional resources.
The Delivery section should include the following values:
- “delcategory”:[“Remote Search Resource”] – the value should be “Remote Search Resource”.
- “fulltext”:[“no_fulltext”] – the value should be taken from the “Calculated Availability Text Labels” code table – Only the last part of the code should be taken.
In Primo VE – if you would like the link to resource to appear also under the “How to get it” section in addition to the links section, the delivery should include: “fulltext“: [“fulltext_ linktorsrc”]
For example:
Note: Beside of those 3 mandatory sections, the following sections are also supported: adddata (required for the citation display), links (the supported links types for Primo VE are: linktorsrc, addlink), enrichment.
For more information on the available PNX sections:
Each of those mandatory sections contain the following fields:
Section Name | Field Name | Is Mandatory | Description |
control | sourcerecordid | Yes | This ID identifies the record in the source repository (such as an ALEPH system number supplied in MARC 21 tag 001). This ID must be unique and persistent within the source repository. It is derived from the OAI header. Best practice for this field is using alphanumeric and underscore. |
sourceid | Yes | The source ID identifies the source repository in Primo. Every source repository has a configuration file in which the sourceid and other information about the source repository are recorded. Best practice for this field is using alphanumeric and underscore. | |
recordid | Yes | The record ID is a unique identifier of the record in the Primo repository. The sourceid and sourcerecordid are concatenated to create the recordid (for example, ALEPH system number + tag 001). There is a 256 length restriction for this field. Best practice for this field is using alphanumeric and underscore. | |
originalsourceid | No | This ID identifies the source repository in the source system. This is not necessarily the same as the source repository’s identifier in Primo—for example, USM01. | |
addsrcrecordid | No | This ID identifies an additional ID of the source record. | |
sourceformat | No | The source format identifies the original format of the source record (such as MARC 21, Dublin Core, and MAB2). | |
sourcesystem | No | The source system identifies the system used by the source repository (such as ALEPH, ADAM, MetaLib, SFX, and Digitool). | |
display
display
display
display
display
display
display | type | yes | The resource type that represents the main format of the record or the type, based on a master list of main record types. It is recommended to include only a minimum number of types (~10). Primo sites are able to modify this list so that it is suited to the content of its repository and its users. The type is used to determine which icon displays next to the record in the brief and full results list. Every record must have a single type field. The default resource type list includes book, journal, article, text_resource (includes text resources that cannot be identified as a book, journal, or article), image, video, audio, map, score, audiovisual, research_dataset, technical_report, database, website, rare_book, review, government_document, dissertation, legal_document, reference_entry, statistical_data_set, newspaper_article, conference_proceeding, book_chapter, patent, archival_material_manuscript, computer_file, dataset, market_research, microform, newspaper, report, standard, web_resource and other (includes records that cannot be classified as any other resource type). Example of source data: · MARC21: Mapping based on the leader position 6 and the 007 and 008 fields. |
title | yes | The name that is given to a resource. The title can be created from a number of fields and subfields from the source record. Multiple occurrences are not concatenated. Example of source data: · MARC21: 245 subfields $$a and $$b. | |
creator | No | The content creator is an entity that is responsible for creating the content of the resource. Multiple occurrences are concatenated with a semicolon. An example of source data: · MARC21: 245 subfields $$c OR if 245 $$c is not present, 1XX, stripping subfield $$d, and stripping from subfield $$t to the end. It is possible to reverse the author’s last and first name (for example, Stephans, Mary to Mary Stephans) by using a special routine. Note: The display form of the creator also serves as a hyperlink to search for additional records. It is important that all of the strings in the display also be added to the creatorcontrib field in the Search section.
| |
contributor | No | The contributor is an entity that is responsible for making a contribution to the content of the resource. Multiple occurrences are concatenated with a semicolon. Example of source data: · MARC21: 700/710/711 fields, stripping subfield $$d, and stripping from subfield $$t to the end. It is possible to reverse the author’s last and first name by using a special routine (for example, Stephans, Mary to Mary Stephans). Note: The display form of the contributor also serves as a hyperlink to search for additional records. It is important that all of the strings in the display also be added to the creatorcontrib field in the Search section.
| |
edition | No | The edition of the resource. This is one of the fields of the PNX record that is not derived from Dublin Core. The edition field is a key element in grouping bibliographic records. Example of source data: · MARC21: 250 $a and $b. | |
publisher | No | An entity that is responsible for making the resource available. Multiple occurrences are concatenated with a semicolon. Example of source data: · MARC21: 260 subfields $a and $b. | |
creationdate | No | The date or year when the resource was created or the year when the resource was published or manufactured. Example of source data: · MARC21: 008/07-10; 260 $$c. | |
format | No | The physical format—physical description, extent, or digital manifestation of the resource. Multiple occurrences are concatenated with a semicolon. Example of source data: · MARC21: 300 and 340 fields. Can also be created from the control data in the leader and 008, 006 fields. | |
ispartof | No | The resource from which this resource is derived (for example, in an article from a journal – the journal is the source). Multiple occurrences are not concatenated. This type of relationship has been added as a specific relationship so it can be displayed as part of the brief results display. Example of source data: · MARC21: 773. Note: The display form of this field also serves as a hyperlink to search for additional records. It is important that all of the strings in the display also be added to the title field in the Search section. | |
identifier | No | Any unique identifier of the record. Dublin Core defines this as an unambiguous reference to the resource within a given context. In the context of the PNX record, this is intended to be used for standard identifiers like ISBN and ISSN. Multiple occurrences are concatenated with a semicolon. Examples of source data (MARC21): · 020 $$a: prefix the value with ISBN. · 022 $$a: prefix the value with ISSN. | |
subject | No | The topic of the resource’s content. Multiple occurrences are concatenated with a semicolon. Example of source data: · MARC21: 6XX fields Note: The display form of the subject also serves as a hyperlink to search for additional records. It is important that all of the strings in the display also be added the subject field in the Search section.
| |
description | No | The description is any information that describes the content of the resource. This can be an abstract, contents notes, summary, and so forth. Multiple occurrences are not concatenated. Example of source data: · MARC21: 502, 505, 520 fields. | |
language | No | The language of the resource. The language is stored in coded form (ISO 639-2) and is translated in the UI. Multiple occurrences are concatenated with a semicolon. If the language is not in ISO 639-2 form, the normalization process attempts to convert it to this form. If this is not possible, the language is unknown (using the undcode). Example of source data: · MARC21: 008/35-37; if blank, use 041 subfield $$a. | |
relation | No | A reference to a related resource. Multiple occurrences are not concatenated. Example of source data: · MARC21: 440, 830, 760-787 except for 773. Note: The display form of this field also serves as a hyperlink to search for additional records. It is important that all of the strings in the display also be added to the title field in the Search section. | |
source | No | The source repository from which the record was derived. | |
coverage | No | The extent or scope of the content of the resource. | |
rights | No | Information about the rights of the resource. | |
availlibrary | No | The library-level availability status, which includes availability information per Primo library or sub-location, in addition to location information. The field is structured with subfields as follows: · $$I — institution code (required) · $$L — library code (required) · $$1 — sub-location · $$2 — call number · $$S — availability status (available, unavailable, check_holdings) (required) · $$3 — number of items · $$4 — number of unavailable items · $$5 — multi-volume flag: Y/N · $$6 — number of loans (for ranking purposes) · $$9 — indicates that the location represents online material. For more information, refer to Adding $$9ONLINE to Library Level Availability. · $$X — source institution code (required for OvP) · $$Y — source library code (required for OvP) · $$Z — source sublocation code (not required for OvP)
| |
availinstitution | No | The availability institution is used at runtime to calculate the availability status for the brief results set. Automatically calculated by Primo from all availlibraryfields that belong to the institution, using the following logic: Primo merges the availability status from $$S for all availlibrary fields for the institution and creates the merged availability status as follows: · If one of the statuses is check_holdings, Primo sets the merged availability status to check_holdings. · If one of the statuses is available, Primo sets the merged availability status to available. · If neither of the above conditions exists, Primo sets the merged availability status to unavailable. If an institution does not have an availability field, Primo creates a field with the availability status does_not_exist. | |
availpnx | No | The availability PNX. Calculated by Primo from all availinstitution fields in the Display section, using the following logic: Primo takes all availinstitution fields and merges the availability status from $$S as follows: · If one of the statuses is check_holdings or available, Primo sets availpnx to available. · If the above condition does not exist, Primo sets availpnx to unavailable. This field is used in the UI when filtering by availability. | |
userreview | No | The user review, which is added by the end user. | |
userrank | No | A rank or score that is assigned by the end user for the resource. | |
vertitle | No | The vernacular title is used when the record contains both a transliterated title and a title in the vernacular (as in the MARC format). Example of source data:
| |
unititle | No | The uniform title will be displayed with the title of the resource when the merged FRBR record is displayed. Example of source data: · MARC21: 240 subfields a, d,m,n, p, r, s Note: The display form of this field also serves as a hyperlink to search for additional records. It is important that all of the strings in the display also be added to the title field in the Search section. | |
crsinfo | No | Course reserve information. | |
lds01- lds250 | No | Local display fields. · Note: lds50 is reserved for use with Primo Central and should not be used locally. · The display form of this field also serves as a hyperlink to search for additional records. It is important that all of the strings in the display also be added to the corresponding field in the Search section.
| |
snippet | no | The Snippet field includes a text taken from any of the record’s field (usually subject or description) | |
delivery
| delcategory | yes | The delivery resource categories for which delivery may function differently. The following are supported categories:
This field is required. A record that does not have a delivery category will fail and display the following error message in the back office: Invalid content was found starting with element ‘ranking’. One of ‘{“”:delivery}}’ is expected. If you define another category in this field, delivery related functionality will not be available for this record. This means that there will be no availability status or GetIt tabs.
|
institution | No | The institution to which the resource belongs. | |
resdelscope | No | Restricted delivery scope that is used to define access restrictions for online resources. The restrictions (based on institution, on/off campus, user group) are defined in a table in the Back Office. Lack of a restricted delivery scope field in the PNX indicates that there are no restrictions. | |
fulltext | No | Indicates that there is online full-text for the resource, which is used for remote search resources. The values for this field should be taken from the code table: “Calculated Availability Text” in Primo Back Office. Only the last part of the code should be taken (e.g. – no_fulltext) |
** Response For “No results”:
The response when there are no results should be as follows:
{“docs”:[],”info”:{“total”:0,”last”:”0″,”maxTotal”:0,”first”:”1″},”facets”:[]}
Enabling the Search Webhook API in Primo
Primo customers must perform the following steps In the Primo Back Office to search the remote content using the search webhook API:
- On the All Mapping Tables page (Primo Home > Advanced Configuration > All Mapping Tables), edit the Deep-Search Plugins mapping table, specify the following fields for the Deep Search plug-in if it has not been defined or if it has been removed:
- Enabled – Select this check box to enable the plug-in.
- Plugin ID – name of the plugin (example: SearchWebhook)
You can configure a different search plug-in for each institution so that they insert their own API key. At the institution level, use the following naming convention to define a different Deep Search plug-in for an institution:
<Plugin_ID>_<institution_code>
- Plugin Class = generic.SearchWebhook
- Plugin Display Name – Enter the display name (such as ‘Search Webhook’).
- Description – Enter an optional description (such as ‘Primo to generic search webhook’).
- On the All Mapping Tables page (Primo Home > Advanced Configuration > All Mapping Tables), edit the Deep Search Plugin Parameters mapping table, specify the following fields for each parameter that you want to modify:
- Enabled – Select this check box to enable the parameter.
- Param name – Specify the name of the parameter (see Search Webhook Plug-In Parameters).
- Param value – Specify the value of the parameter if encryption is not needed (see Search Webhook Plug-In Parameters)
- Param value – Encrypted – Specify the value of the parameter if encryption is needed. Use this field to encrypt sensitive information (such as keys and passwords).
- Plugin – Select the plug-in ID of the plug-in that uses the parameter.
- Description – Specify text that describes the functionality of the parameter. This field is optional.
Search Webhook Plug-In Parameters
- URL – The URL for the search webhook API.
- GenKey – The key used by the institution to authenticate with the search webhook services. You should not encrypt it in any way.
Make sure though to insert the value in the “Param value – Encrypted” column, and leave the “Param value” column empty for this row.
- On the Deploy All page (Primo Home > Deploy All), select the Deep Search Configuration option, and then select Deploy.
- Add the deep search plug-in to the search scope in the Views Wizard (Views List > Edit View > Search Scope List > Edit Scope).
- Deploy the view.
** Other optional parameters available for this plugin are:
- primo_services/primo_highlighting
- warmup/enable
- cache/enable
- cache/batchsize
(The explanation can be found here:
Note: After configuring the search webhook, a new search scope should be created and defined to use the search webhook – for more details on defining a search scope – https://knowledge.exlibrisgroup.com/Primo/Product_Documentation/Primo/Back_Office_Guide/060Configuring_Primo%E2%80%99s_Front_End/020Views_Wizard#ww1052871
Enabling the Search Webhook API in Primo VE
Primo VE customers must perform the following steps to search the remote content using the search webhook API:
- Under “Discovery > Search Profiles > Other Indexes”, choose “Search Webhook” in order to create a new profile.
- Edit the “Search Webhook” configuration, and fill the following fields:
Scope Details:
– Scope Name
– Code
– Description
Remote Index Details:
– URL: Should contain the remote’s search index url
– API Token: Should contain the key set in the remote index server; This key will enable the search from Primo VE in the remote index.
Note: After configuring the search webhook profile, a new search scope should be defined to use the search webhook – for more details on defining a search scope –
Appendix:
1. Links section in the PNX – for Primo only:
Field Name | Description |
additionallinks | Additional links that are relevant to the resource. |
backlink | A link back to the original record in the source repository. |
linktoabstract | A link to the item’s abstract. |
linktoexcerpt | A link to the item’s excerpt. |
linktoextract | A link to an extract or first chapter of the item. |
linktofindingaid | A link to a finding aid. |
linktoholdings | A link to the holdings display and request options in the source system. For multi-institution sites, the following links can be used:
linktoholdings_notexist—A link to the holdings display and request options in the source system if the item does not exist in the user’s institution. |
linktoholdsavail | A link to an item’s available holdings. |
linktoholdsunavail | A link to an item’s unavailable holdings. |
linktoholdsnotexist | A link when holdings do not exist. |
linktoprice | A link to the item’s price. |
linktorequest | A link to a form or page on which a user can place a request. |
linktoreview | A link to the item’s review. |
linktorsrc | A link to the resource itself (for example, to the full-text or image). |
linktotoc | A link to the item’s table of contents. |
linktouc | A link to a Union Catalog (such as WorldCat). |
openurl | This URL can be created by Primo for the metadata in the PNX. |
openurlfullt | An open URL that is limited to the full-text service. |
openurlservice | An open URL that is limited to a specific service other then the full-text service. |
sourcerecord | A link to the item’s source record. |
thumbnail | A link to the item’s thumbnail. |
uri | A link to the item’s URI. |
lln01 – lln50 | Local links fields. |
Note: A link structure should be the as following: ‘link: $$U<url>$$D<display_name>’