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:

  1. Primo sends a query request to the service’s Rest API.
    This request will contain the token configured in the setup phase.
  2. The service should validate the request using the token that was sent in the request.
  3. 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 NameTypeIs MandatoryDescription
queryStringYesThe search query
The query will be sent in the syntax below
fromIntegerYesStarting point for the pagination capability.
Results will be taken starting from this offset.
bulksizeIntegerYesNumber of records to take, starting from the from parameter.
sortStringYesThe 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.

 

NameQuery FieldDescription
Material Typefacet_pfilterEnables 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”)

Languagefacet_langEnables to search records by their language.

The languages sent are 3-letters codes.

 

Example: facet_lang:(“eng”)

Publication Date

 

 

 

 

 

facet_creationdateEnables 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 Datestartdate, enddateEnables 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_genreGenre
facet_domainCollection
facet_topicSubject
facet_rtypeResource Type
facet_tabsTabs
facet_dccClassification DDC
facet_creatorAuthor/Creator
facet_fsizeFile Size
facet_jtitleJournal Title
facet_fmtFormat
facet_pfilterPre-Filter
facet_tlevelAvailability
facet_rvkClassification RVK
facet_langLanguage
facet_pnxdatePNX Date
facet_editionEdition
facet_lccClassification LCC
facet_creationdateCreation Date
facet_libraryLibrary
facet_newrecordsNew Records
facet_crsnameCourse name
facet_crsinstrcCourse instructor
facet_crsidCourse ID
facet_crsdeptCourse department
facet_rtype_newspapersNewspapers search
facet_acadunitAcademic Unit
facet_dbcategoryDB Category
facet_local1Local Field1
facet_local2Local Field2
….
facet_local50Local 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:

https://knowledge.exlibrisgroup.com/Primo/Product_Documentation/Primo/Technical_Guide/010The_PNX_Record/010PNX_Record_Sections

 

Each of those mandatory sections contain the following fields:

 

Section NameField NameIs MandatoryDescription
 

 

 

 

 

 

 

 

 

 

 

 

control

sourcerecordidYesThis 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.

sourceidYesThe 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.

recordidYesThe 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.

originalsourceidNoThis 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.
addsrcrecordidNoThis ID identifies an additional ID of the source record.
sourceformatNoThe source format identifies the original format of the source record (such as MARC 21, Dublin Core, and MAB2).
sourcesystemNoThe 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

typeyesThe 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.

titleyesThe 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.

creatorNoThe 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.

 

contributorNoThe 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.

 

editionNoThe 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.

publisherNoAn 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.

creationdateNoThe 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.

formatNoThe 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.

ispartofNoThe 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.

identifierNoAny 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.

subjectNoThe 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.

 

descriptionNoThe 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.

languageNoThe 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.

relationNoA 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.

sourceNoThe source repository from which the record was derived.
coverageNoThe extent or scope of the content of the resource.
rightsNoInformation about the rights of the resource.
availlibraryNoThe 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)

 

availinstitutionNoThe 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.

availpnxNoThe 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.

userreviewNoThe user review, which is added by the end user.
userrankNoA rank or score that is assigned by the end user for the resource.
vertitleNoThe 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:

  • MARC21: 880 with subfield 6 =245 and subfields a and b.
unititleNoThe 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.

crsinfoNoCourse reserve information.
lds01- lds250NoLocal 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.

 

 snippetnoThe Snippet field includes a text taken from any of the record’s field (usually subject or description)
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

delivery

 

 

 

 

 

 

 

 

 

 

delcategoryyesThe delivery resource categories for which delivery may function differently. The following are supported categories:

  • Physical Item – all physical items except for microforms.
  • Microform
  • SFX Resource
  • Online Resource
  • MetaLib Resource—records from the MetaLib Knowledgebase
  • Remote Search Resource—records retrieved via MetaLib.

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.

 

institutionNoThe institution to which the resource belongs.
resdelscopeNoRestricted 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.
fulltextNoIndicates 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:

  1. 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’).
  1. 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 valueEncrypted – 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.

  1. On the Deploy All page (Primo Home > Deploy All), select the Deep Search Configuration option, and then select Deploy.
  2. Add the deep search plug-in to the search scope in the Views Wizard (Views List > Edit View > Search Scope List > Edit Scope).
  3. 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:

https://knowledge.exlibrisgroup.com/Primo/Product_Documentation/Primo/Back_Office_Guide/110Additional_Primo_Features/Primo_to_Primo_Deep_Searches)

 

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:

  1. Under “Discovery > Search Profiles > Other Indexes”, choose “Search Webhook” in order to create a new profile.
  2. 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 –

https://knowledge.exlibrisgroup.com/Primo/Product_Documentation/020Primo_VE/022Search_Configuration/010Configuring_Search_Profiles_for_Primo_VE

 

Appendix:

 

1.      Links section in the PNX – for Primo only:

 

Field NameDescription
additionallinksAdditional links that are relevant to the resource.
backlinkA link back to the original record in the source repository.
linktoabstractA link to the item’s abstract.
linktoexcerptA link to the item’s excerpt.
linktoextractA link to an extract or first chapter of the item.
linktofindingaidA link to a finding aid.
linktoholdingsA link to the holdings display and request options in the source system.

For multi-institution sites, the following links can be used:

  • linktoholdings_avail—A link to the holdings display and request options in the source system if the item is available in the user’s institution.
  • linktoholdings_unavail—A link to the holdings display and request options in the source system if the item is unavailable in the user’s institution.

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.

linktoholdsavailA link to an item’s available holdings.
linktoholdsunavailA link to an item’s unavailable holdings.
linktoholdsnotexistA link when holdings do not exist.
linktopriceA link to the item’s price.
linktorequestA link to a form or page on which a user can place a request.
linktoreviewA link to the item’s review.
linktorsrcA link to the resource itself (for example, to the full-text or image).
linktotocA link to the item’s table of contents.
linktoucA link to a Union Catalog (such as WorldCat).
openurlThis URL can be created by Primo for the metadata in the PNX.
openurlfulltAn open URL that is limited to the full-text service.
openurlserviceAn open URL that is limited to a specific service other then the full-text service.
sourcerecordA link to the item’s source record.
thumbnailA link to the item’s thumbnail.
uriA link to the item’s URI.
lln01 – lln50Local links fields.

Note: A link structure should be the as following: ‘link: $$U<url>$$D<display_name>’