Omni Search
DexCare’s Omni Search is a web-based search experience that aides consumers looking for care options, be they individual clinicians or clinics within a health system.
Traditional healthcare search options often limit users to basic name and location lookups or filtering by specific conditions. Omni Search lets users search for care options using a single text input from which it will generate highly specific queries (referred to as long tail queries).
Our natural language processing functionality automatically breaks down a phrase such as “where to find the nearest flu shot” into its component parts and determines its intent. Our search query parsing also includes support for error tolerance (e.g., spelling mistakes) and synonym recognition of medical terms and phrases.
The Omni Search API is a REST/JSON API that powers Omni Search.
The Omni Search API allows health care systems to create their own implementations on top of the core functionality that Omni Search provides. The API allows the following functionality to be invoked:
- Execution of
search
andautocomplete
queries - Retrieving data for individual practitioners (clinicians) and clinics (departments)
- Retrieving synonyms and facets
- Submitting data for analytics
- Updating the OmniSearch cache
This guide will provide an overview of Omni Search functionality, key entities that are part of the API, and example queries for standard use cases. For a comprehensive reference, consult the Omni Search OAS specification.
Use this API in conjunction with the DexCare Care Options API and the Slot Availability API to retrieve available appointment time slots for clinics and clinicians. For an overview of of those APIs consult our guide on Provider Timeslots.
Key Omni Search API Functionality
Search Input Parsing
Omni Search uses a rules-based Natural Language Parsing (NLP) to:
- break apart search terms
- tokenize the input for root stemming
- process for synonyms
- provide spelling corrections
- identify intent
Identifying intent includes determining the best way to sort results and what type of visit the end user is interested in (see “Sorting Detection” and “Types of Visits” below).
Use the /api/OmniSearch
endpoint to execute a search query, passing search text you wish to parse as the search
parameter. Additional parameters allow you to apply filters, narrow the search to specific types of visits, specify a particular location (or infer it from the search), or limit the type of results that come back.
Synonym Recognition
To find the most relevant care options, Omni Search maintains relationships between recognized medical terms and possible conditions or symptoms that an end user may be experiencing.
DexCare maintains a synonym library that will match a phrase provided by the end user with clinical keywords (e.g., “daily persistent headache” will match the term “chronic migraines”). These synonyms may be customized for a given health system.
To see what synonyms are returned for a given keyword, use the api/OmniSynonyms
endpoint. An example is shown below.
Keywords, Facets, and Filters
Keywords
Keywords are extracted from the search input provided to the API. These keywords will be matched against synonyms and used to match against data fields of clinicians and departments (e.g., the clinicians’s title or primary speciality). The various fields may be given different weights as part of the configuration of Omni Search that will impact the order in which matches are displayed.
Facets
Facets are a mechanism to narrow down search results based on specific criteria or attributes. Sometimes referred to as “guided navigation” or “smart filters,” facet-based search typically presents the users with multiple inputs to fill out or from which to select options.
Facets will have a limited number of options (i.e. they have low cardinality). Fields with high cardinality can still be used to narrow search results through the use of filters (see the * parameter in the Request Parameters section).
You may provide the name of facet-able fields as search parameters. See below for an example query.
Facets that are available for departments or clinicians may be retrieved using the /api/OmniSearchFacets
endpoint, with the option to include the number of results that match a given facet (the count
) and to limit the results to only facets that use string values (using stringvalues
).
When search results are returned, a list of facets used in the search will also be returned as a part of the SearchInfo object (info
property on the response object).
"facets": {
"Languages": [
"Spanish"
]
},
Additionally, for any given filter that is used for a search, a list of relevant facets (if any) will be returned with search result’s info
object that will include the facet’s name and value.
"filters": [
{
"value": "Spanish",
"text": "spanish",
"facets": [
{
"name": "Languages",
"value": "Spanish"
}
],
"auto": true,
"facet": "Languages"
},
Filters
Filters will be generated using both NLP and based on faceted search parameters that you provide.
Filters are described in further detail in the Entities section below.
Geographic Parameters and Determining Distance
Distance is the primary sorting signal for all searches and generated a search score. Modifiers are calculated to adjust the distance.
For the purpose of determining the end user’s location as it pertains to search you may provide:
a specific set of latitude
and longitude
values as decimal values
a location
string with a the name of a specific locality (e.g., city or county)
the inferLocationFromSearch
flag to indicate that OmniSearch should use the provided search
string to determine the location.
Information about the end user’s location based on the their IP Address and search query is contained in the GeoIP entity (see below) for queries to our search endpoint.
Result Scoring and Sorting
Sorting Detection
Search results will be sorted by detecting key phrases from the end user’s input such as:
-
near me (this is the default behavior, see “How Distance Factors Into Results”)
-
soonest, next available, same day, first available (this may also be set explicitly through the
soonest
query parameter Boolean flag) -
online booking, online scheduling (this may also be set explicitly through the
videoVisits
query parameter Boolean flag)
Types of Visits
You can prioritize the type of visit using the following Boolean flag query parameters
The following two visit type filters show results regardless of the availability of time slots.
-
acceptingNewPatients
- When set totrue
, Omni Search orders care option results by those accepting new patients first, whether or not such appointments are currently available. This may be important for cases such as walk-in clinics, where appointments are not necessary. -
virtualCare
- When set totrue
, Omni Search orders care option results by those offering virtual care first. These results may be shown whether or not virtual visit time slots exist.
These two visit type flags are affected by the availability of appointment time slots correpondingto the visit type:
-
clinicVisits
- When set totrue
, Omni Search orders care option results to prioritize those available for in person visits. Corresponds to time slots being available to this type of visit. -
videoVisits
- When set totrue
, Omni Search orders care option results by those available for new video visits. Corresponds to time slots being available to this type of visit.
Date Based Filters
You can limit search results to particular days
of the week using the days query parameter and certain period of the day using the time
parameter (morning
, afternoon
or any
)
How Distance Factors Into Results
Distance is the primary sorting signal for all searches. Modifiers such as appointment time slot availability and relevancy to the search keywords are calculated to adjust the distance.
If your provide the user’s specific address or geographic co-ordinates, Omni Search sorts departments and clinicians using a straight-line distance between the end user and the care option. However if the location is limit to only a specific locale (e.g., “Atlanta”), all care options in that locale will be treated as equidistant, and we will sort against each care option only on relevancy and availability
How Appointment Availability Factors Into Results
- Types of appointments (new patients, virtual visits)
- Time slot availability (number of time slots, time slots in the future)
Use of Badges
Results include search terms/phrases that matched specific fields to help correlate what content drove the match.
These badges serve as cues for how a search was dissected and can be used as a quick mechanism to remove terms from a search if that filtering is no longer desired.
The badges explain to end users why a given care option is surfacing in the search results. When badges are not provided, it tends to lead to confusion(e.g., “why is this clinician listed?”)
When executing search for “Spanish speaking” could result in a badge in the search result "Languages: Spanish"
, indicating that the search term was a match for a Languages facet value.
The top 4 badges are returned along with the field they matched as part of the result object.
{
...
"results": [
{
"type": "provider",
...
"badges": {
"Languages: Spanish": "Languages: Spanish"
},
...
}
]
...
}
Below is an example of badges for a Clinician returned for a search for “cancer”
"badges": {
"Primary Specialty: Neuro-Oncology": "Primary Specialty: Neuro-Oncology",
"Keywords: benign neoplasm of brain": "Keywords: benign neoplasm of brain",
"Keywords: brain neoplasms": "Keywords: brain neoplasms",
"Keywords: orbital tumors": "Keywords: orbital tumors"
}
Limiting and Paging Results
You may limit the number of results using the numeric query string parameter top
You may page through results using the skip
query string parameter, for which you will provide the offsets you wish to use for clinicians and departments as a comma separated list of numbers. For example, to skip the first 3 clinician results and the first 5 department results, set skip=3,5
. The default value for skip is 0,0
.
Brands
The brand
is a required parameter for all searches. It corresponds to the specific code assigned to your health system. If your health system has more than one branding you will may need to provide a childBand
as well.
Search Type
The parameter type will be one of the following:
search
- Returns a list of results for a complete searchautocomplete
- Returns a list of “completions” for an incomplete search (see below for an example of an autocomplete query).
Omni Search Entities
The primary entities you will be interacting with from the Omni Search API are returned as part of the OmniSuccessResponse
object that is returned by the /api/OmniSearch
endpoint. This includes the care options as Clincians
(i.e., individual clinicians) and Departmets
(e.g., clinics) objects are returned as a combined set of results
. The deprecated fields locations
and providers
should not be used.
These entities may also be looked up via the /api/OmniData
endpoint and this is the endpoint you should use when you want to retrueve a single provider or location.
Also included in the response is the SearchInfo
object (as the info
field) which will include the original search string as well as filters, facets, and locations used to narrow the results.
In addition the response object includes geographical location and IP Address information about the end user as the GeoIP
object.
Common Care Option Fields
Clinicians and Departments have a number of properties in common that are described below.
- address and contact (e.g., phone) properties
- distance from the end user, geocoded coordinates
- Supported Visit Types through boolean flags
isAcceptingNewPatients
— Indicates that the care option is accepting new patients. New patient appointments are typically allotted more time for the purpose on intake.isBookableOnline
— Indicates if a care option webpage should display the timeslot widgetisBookablePhone
— Indicates a care option should display phone visit types on the timeslot widget.isBookableVirtual
— Indicates that the care option supports virtual office visits, meaning customers can speak with a provider using video chat.isNewPatientEnabled
— indicates a care option accepts new patients (i.e., users open scheduling in epic)isReturningPatientEnabled
— indicates a care option accepts returning patients (i.e., direct open scheduling in epic)
Clinician
The Clinician entity (clinicianFastPages
) is one of two care options in the results
of the OmniSucessResponse
object that is returned by a successful call to the Omni Search /api/OmniSearch
endpoint, the other being a Department (see below). This entity will also be returned by the /api/OmniData
endpoint when you provide a list of Nation Provider Identifiers (npis
) or unique identifiers (ids
) for a given practitioner.
Clinician refer to a specific individual physician and can be identified as such because their type
field will be assigned to clinician
. Because they are individual providers, Clinicians will have an National Provider Identifier (npi
) and one or more urls to their online profile (profileUrls
).
The following properties are distinct to clinicians:
credentials
,certifications
,education
history andhospitalAffiliations
gender
,languages
they speak, and theirbio
primarySpecialities
,subSpecialties
andmedicalInterests
- multiple
departments
where they can be found (the primary department being indicated bydepartmentPrimaryUuid
)
You may limit the results to clinician only with the Boolean query parameter clinicians
Below is an example of a Clinician entity returned as a result in a search agains the Omni Search API
Note that it is possible for a single Clinician to have multiple departments and that will correspond to the number of distances returned.
{
"@search.score": 0.14675301699069723,
"@search.highlights": {
"languages": [
"<strong>Spanish</strong>"
],
"specialties.name": [
"<strong>Pediatrics</strong>",
"<strong>Pediatric Infectious Diseases</strong>"
],
"departments.displayName": [
"<strong>USF Department of Pediatrics</strong>"
]
},
"credentials": [
"MD"
],
"emrIdentifiers": [
{
"emrId": "173427"
}
],
"networks": [],
"profileUrls": [
{
"brandName": "tgh",
"url": "https://www.yourorg.org/providers/jane-doe-1013947654"
}
],
"reviews": [],
"subSpecialties": [
{
"name": "Primary Care"
},
{
"name": "PCP"
},
{
"name": "Pediatrics"
},
{
"name": "Pediatric Infectious Diseases"
}
],
"id": "9c291327-c40b-5d48-9620-e3ab3e9993ec-tgh|602b5bb2-a7ee-5ba8-85bf-db144cdbef98-tgh",
"imageUrl": "https://www.yourorg.org/-/media/dexcare/provider/1013947654.jpg",
"isAcceptingNewPatients": false,
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"name": {
"first": "Jane",
"last": "Doe",
"middles": [
""
]
},
"npi": "1013947654",
"resultType": "clinician",
"@search.features": {
"NewClinic": {
"similarityScore": 0
},
"NewVideo": {
"similarityScore": 0
},
"FollowUpClinic": {
"similarityScore": 0
},
"FollowUpVideo": {
"similarityScore": 0
},
"languages": {
"similarityScore": 2
},
"specialties.name": {
"similarityScore": 3
}
},
"@search.distance": {
"type": "absolute",
"miles": 2395.947592132535,
"numeric": 41.036418595925475
},
"departments": [
{
"address": {
"addressLine1": "1313 Mockingbird Lane",
"city": "Mockingbird Heights,
"country": "US",
"county": "Los Angeles",
"latitude": 34.1371,
"longitude": -118.3533,
"postalCode": "91608",
"state": "CA"
},
"displayName": "Department of Pediatrics",
"emrIdentifier": {
"emrId": "peds5"
},
"fax": "",
"id": "602b5bb2-a7ee-5ba8-85bf-db144cdbef98",
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "5555551000",
"resultType": "department",
"timezone": "",
"url": "https://www.yourorg.org/locations/dept1"
}
],
"badges": [
"Languages: Spanish",
"Specialty: Pediatrics",
"Specialty: Pediatric Infectious Diseases",
"Department Name: Department of Pediatrics"
],
"distances": [
2395.947592132535
]
}
Department
A Department (departmentFastPages
) is one of two care options in the results
of the OmniSucessResponse
object that is returned by a successful call to the Omni Search /api/OmniSearch
endpoint, the other being a Clinician (see above). This entity will also be returned by the /api/OmniData
endpoint when you provide a list of department ids or department urls.
Departments refer to retail clinics, urgent care centers, etc.
You may limit the results to only include Departments with the Boolean query parameter departments
Below is a sample result from Omni Search showing a Department.
{
"@search.score": 0.14686883182816682,
"@search.highlights": {
"displayName": [
"<strong>TGH Cancer Institute St. Petersburg</strong>"
]
},
"specialties": [],
"address": {
"addressLine1": "1313 Mockingbird Lane",
"city": "Mockingbird Heights,
"country": "US",
"county": "Los Angeles",
"latitude": 34.1371,
"longitude": -118.3533,
"postalCode": "91608",
"state": "CA"
},
"brandName": "yourbrand",
"displayName": "Cancer Institute",
"emrIdentifier": {
"emrId": "youremr_1001",
"emrSystemId": "youremr_system"
},
"id": "123457f9-ae2c-5b12-87d6-4356b4990194",
"isAcceptingNewPatients": false,
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "5555551001",
"resultType": "department",
"url": "https://www.yourorg.org/locations/location_1001",
"@search.features": {
"NewClinic": {
"similarityScore": 0
},
"NewVideo": {
"similarityScore": 0
},
"FollowUpClinic": {
"similarityScore": 0
},
"FollowUpVideo": {
"similarityScore": 0
},
"displayName": {
"similarityScore": 5
}
},
"@search.distance": {
"type": "absolute",
"miles": 2394.3928325869883,
"numeric": 41.02563081234169
},
"clinicians": [],
"badges": [
"Name: Cancer Institute"
],
"distance": 2394.3928325869883
}
Search Info
The SearchInfo
provides details on the search that was executed, including the type
of search (provider or location), the original search
string provided by the end user, and the filters, facets, and locations that the search input was parsed into or were otherwise provided as parameters.
any
— A Boolean flag that indicates if the search that was executed was an “AND” type of search or an “OR” type of search. If the user searches for “female Spanish cardiologist”, Omni Search will first try to find a provider that matches all three criteria, doing an “AND” search — i.e., female AND speaks Spanish AND cardiologist. If there is a match, theany
field will be false. If there are no clincians that match all three conditions, Omni Search will switch to an “OR” search — i.e., female OR speaks Spanish OR cardiologist. In this case, theany
field will be set to true. Theany
field instructs frontend to display a message to indicate to end users that they are no exact matches and Omni Search has returned results that are similar to their query.facets
— The facets listed in the search info are those that were used as part of the search.filters
— Filter include not only the name pair value that was used in the search but also the facets which they matched.some
— A Boolean flag that will beTrue
if the search surfaced any results.search
— The search property contains the original search query (if any) that was submitted as part of the search after autocorrect is applied.type
— Thetype
of query that was submitted
Filters
Below is an example of the structure of a filter associated with the SearchInfo object.
"filters": [
{
"value": "Spanish",
"text": "spanish",
"facets": [
{
"name": "languages",
"value": "Spanish"
}
],
"auto": true,
"facet": "languages"
},
GeoIP
The GeoP entity contains geolocation information by IP address from the Omni Search GeoIP service as well as search criteria that was submitted.
When location information isn’t provided from the session or user, Omni Search relies on the x-forwarded-for
header to do a GeoIP lookup on the origin IP address.
Example GeoIP:
"geolocation": {
"success": true,
"error": null,
"disclaimer": "This service may only be used by DexCare, Inc. products and services.",
"ip": "99.112.68.46",
"city": "San Francisco",
"state": "CA",
"coordinates": {
"lat": 37.7825,
"lng": -122.435
},
"type": "ip"
},
Use Cases
Searching for Clinician That Meet Certain Criteria Using NLP
The following example of the search endpoint returns Clinicians using our Natural Language Parsing capabilities.
Find Spanish speaking pediatrics doctors near me
Example Request
curl --location 'womphealthtestapi.azurewebsites.net/api/OmniSearch?brand=demo&type=search&search=Find%20Spanish%20speaking%20pediatrics%20doctors%20near%20me' \
--header 'Accept: application/json'
Example Response
{
"info": {
"search": "Find Spanish speaking pediatrics doctors near me",
"filters": [
{
"value": "Spanish",
"text": "spanish",
"facets": [
{
"name": "languages",
"value": "Spanish"
}
],
"auto": true,
"facet": "languages"
},
{
"value": "speaking",
"text": "speaking",
"facets": [],
"auto": true
},
{
"value": "Pediatrics",
"text": "pediatrics",
"facets": [
{
"name": "conditionsTreated",
"value": "Pediatrics"
},
{
"name": "specialties.name",
"value": "Pediatrics"
},
{
"name": "subSpecialties.name",
"value": "Pediatrics"
}
],
"auto": true,
"facet": "subSpecialties.name"
},
{
"value": "near",
"text": "near",
"facets": [],
"auto": true
}
],
"locations": [
{
"name": "USF Pathology Department",
"id": "1f5ef068-ca2a-5638-b7e1-341e94757bd2",
"distance": 2398.3027556241423
},
{
"name": "USF Department of Pediatrics",
"id": "82097bb7-5499-58e1-a440-1df9985ec83a",
"distance": 2407.325896176635
},
{
"name": "USF Department of Pediatrics",
"id": "dc762757-4a84-5d3a-b6bd-b179f8894160",
"distance": 2395.7808170225685
}
],
"facets": {},
"any": true,
"some": true,
"type": [],
"matches": [
"spanish",
"kid",
"pediatric nephrology",
"pediatric infectious diseases",
"usf department of pediatrics"
],
},
"results": [
{
"@search.score": 0.14755063455306586,
"@search.highlights": {
"languages": [
"<strong>Spanish</strong>"
],
"specialties.name": [
"<strong>Pediatrics</strong>",
"<strong>Pediatric Nephrology</strong>"
],
"conditionsTreated": [
"<strong>Pediatrics</strong>"
]
},
"credentials": [
"MD"
],
"emrIdentifiers": [
{
"emrId": "099218"
}
],
"networks": [],
"profileUrls": [
{
"brandName": "tgh",
"url": "https://www.getcare.tgh.org/providers/alfonso-campos-1285641076"
}
],
"reviews": [],
"subSpecialties": [
{
"name": "Primary Care"
},
{
"name": "Pediatric Nephrology"
},
{
"name": "PCP"
},
{
"name": "Pediatrics"
}
],
"id": "0dcdb27b-fe97-5e99-bb46-d8f00321774b-tgh|443797db-3cca-5161-9656-bda0c73f12e5-tgh",
"imageUrl": "https://www.tgh.org/-/media/dexcare/provider/1285641076.jpg",
"isAcceptingNewPatients": false,
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"name": {
"first": "Alfonso",
"last": "Campos",
"middles": [
""
]
},
"npi": "1285641076",
"resultType": "clinician",
"@search.features": {
"NewClinic": {
"similarityScore": 0
},
"NewVideo": {
"similarityScore": 0
},
"FollowUpClinic": {
"similarityScore": 0
},
"FollowUpVideo": {
"similarityScore": 0
},
"languages": {
"similarityScore": 2
},
"specialties.name": {
"similarityScore": 3
}
},
"@search.distance": {
"type": "absolute",
"miles": 2378.777349044822,
"numeric": 40.87652787609675
},
"departments": [
{
"address": {
"addressLine1": "4443 Rowan Rd",
"city": "New Port Richey",
"country": "US",
"county": "Pasco County",
"latitude": 28.2240005,
"longitude": -82.6917538,
"postalCode": "34653",
"state": "FL"
},
"displayName": "USF Health Department of Pediatrics, Division of Nephrology",
"emrIdentifier": {
"emrId": "USFPedNeph"
},
"fax": "",
"id": "443797db-3cca-5161-9656-bda0c73f12e5",
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "",
"resultType": "department",
"timezone": "",
"url": "https://www.getcare.tgh.org/locations/fl/new-port-richey/usf-health-department-of-pediatrics-division-of-nephrology-usfpedneph"
},
{
"address": {
"addressLine1": "4550 Colonial Blvd",
"city": "Fort Myers",
"country": "US",
"county": "Lee County",
"latitude": 26.6097132,
"longitude": -81.82008789999999,
"postalCode": "33966",
"state": "FL"
},
"displayName": "USF Health Department of Pediatrics, Division of Nephrology",
"emrIdentifier": {
"emrId": "USFPedFtm"
},
"fax": "",
"id": "6f18d6cd-528a-588d-9922-b39a1d076d1d",
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "",
"resultType": "department",
"timezone": "",
"url": "https://www.getcare.tgh.org/locations/fl/fort-myers/usf-health-department-of-pediatrics-division-of-nephrology-usfpedftm"
},
{
"address": {
"addressLine1": "3310 Lakeland Hills Blvd",
"city": "Lakeland",
"country": "US",
"county": "Polk County",
"latitude": 28.0848461,
"longitude": -81.9540979,
"postalCode": "33805",
"state": "FL"
},
"displayName": "USF Health Department of Pediatrics, Division of Nephrology",
"emrIdentifier": {
"emrId": "USFPedLake"
},
"fax": "",
"id": "774ea897-cb4d-53ab-b315-4304c4de8203",
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "",
"resultType": "department",
"timezone": "",
"url": "https://www.getcare.tgh.org/locations/fl/lakeland/usf-health-department-of-pediatrics-division-of-nephrology-usfpedlake"
}
],
"badges": [
"Languages: Spanish",
"Conditions Treated: Pediatrics",
"Specialty: Pediatric Nephrology"
],
"distances": [
2378.777349044822,
2477.8306184632997,
2423.310726322691
]
},
{
"@search.score": 0.14675301699069723,
"@search.highlights": {
"languages": [
"<strong>Spanish</strong>"
],
"specialties.name": [
"<strong>Pediatrics</strong>",
"<strong>Pediatric Infectious Diseases</strong>"
],
"departments.displayName": [
"<strong>USF Department of Pediatrics</strong>"
]
},
"credentials": [
"MD"
],
"emrIdentifiers": [
{
"emrId": "173427"
}
],
"networks": [],
"profileUrls": [
{
"brandName": "tgh",
"url": "https://www.getcare.tgh.org/providers/carina-rodriguez-1013947654"
}
],
"reviews": [],
"subSpecialties": [
{
"name": "Primary Care"
},
{
"name": "PCP"
},
{
"name": "Pediatrics"
},
{
"name": "Pediatric Infectious Diseases"
}
],
"id": "9c291327-c40b-5d48-9620-e3ab3e9993ec-tgh|602b5bb2-a7ee-5ba8-85bf-db144cdbef98-tgh",
"imageUrl": "https://www.tgh.org/-/media/dexcare/provider/1013947654.jpg",
"isAcceptingNewPatients": false,
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"name": {
"first": "Carina",
"last": "Rodriguez",
"middles": [
""
]
},
"npi": "1013947654",
"resultType": "clinician",
"@search.features": {
"NewClinic": {
"similarityScore": 0
},
"NewVideo": {
"similarityScore": 0
},
"FollowUpClinic": {
"similarityScore": 0
},
"FollowUpVideo": {
"similarityScore": 0
},
"languages": {
"similarityScore": 2
},
"specialties.name": {
"similarityScore": 3
}
},
"@search.distance": {
"type": "absolute",
"miles": 2395.947592132535,
"numeric": 41.036418595925475
},
"departments": [
{
"address": {
"addressLine1": "601 5th St S",
"city": "St. Petersburg",
"country": "US",
"county": "Pinellas County",
"latitude": 27.7639394,
"longitude": -82.6403258,
"postalCode": "33701",
"state": "FL"
},
"displayName": "USF Department of Pediatrics",
"emrIdentifier": {
"emrId": "peds5"
},
"fax": "",
"id": "602b5bb2-a7ee-5ba8-85bf-db144cdbef98",
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "7278286390",
"resultType": "department",
"timezone": "",
"url": "https://www.getcare.tgh.org/locations/fl/st.-petersburg/usf-department-of-pediatrics-peds5"
},
{
"address": {
"addressLine1": "1315 E 7th Ave",
"addressLine2": "STE 104",
"city": "Tampa",
"country": "US",
"county": "Hillsborough County",
"latitude": 27.96015139999999,
"longitude": -82.4448499,
"postalCode": "33605",
"state": "FL"
},
"displayName": "USF Department of Pediatrics",
"emrIdentifier": {
"emrId": "peds"
},
"fax": "",
"id": "5a207161-c1c2-5c63-8bcf-6690982ecb12",
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "8138218700",
"resultType": "department",
"timezone": "",
"url": "https://www.getcare.tgh.org/locations/fl/tampa/usf-department-of-pediatrics-peds"
},
{
"address": {
"addressLine1": "3003 W M.L.K. Jr Blvd",
"city": "Tampa",
"country": "US",
"county": "Hillsborough County",
"latitude": 27.9826585,
"longitude": -82.4922184,
"postalCode": "33607",
"state": "FL"
},
"displayName": "USF Department of Pediatrics",
"emrIdentifier": {
"emrId": "peds4"
},
"fax": "",
"id": "9902a122-b8d7-52bf-ae8f-4d7ffadfab39",
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "",
"resultType": "department",
"timezone": "",
"url": "https://www.getcare.tgh.org/locations/fl/tampa/usf-department-of-pediatrics-peds4"
},
{
"address": {
"addressLine1": "13101 Bruce B Downs Blvd",
"city": "Tampa",
"country": "US",
"county": "Hillsborough County",
"latitude": 28.0662871,
"longitude": -82.4251654,
"postalCode": "33612",
"state": "FL"
},
"displayName": "USF Department of Pediatrics",
"emrIdentifier": {
"emrId": "USFDOGIH"
},
"fax": "",
"id": "5521ab2b-7bf0-5532-b2f4-f1fc14caabef",
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "8138218700",
"resultType": "department",
"timezone": "",
"url": "https://www.getcare.tgh.org/locations/fl/tampa/usf-department-of-pediatrics-usfdogih"
}
],
"badges": [
"Languages: Spanish",
"Specialty: Pediatrics",
"Specialty: Pediatric Infectious Diseases",
"Department Name: USF Department of Pediatrics"
],
"distances": [
2395.947592132535,
2400.4371755799466,
2397.1523949160346,
2398.201168183439
]
},
{
"@search.score": 0.146030273843954,
"@search.highlights": {
"languages": [
"<strong>Spanish</strong>"
],
"specialties.name": [
"<strong>Pediatrics</strong>"
],
"conditionsTreated": [
"<strong>Pediatrics</strong>"
],
"departments.displayName": [
"<strong>USF Department of Pediatrics</strong>"
]
},
"credentials": [
"MD"
],
"emrIdentifiers": [
{
"emrId": "176255"
}
],
"networks": [],
"profileUrls": [
{
"brandName": "tgh",
"url": "https://www.getcare.tgh.org/providers/vinita-kiluk-1033113485"
}
],
"reviews": [],
"subSpecialties": [
{
"name": "Primary Care"
},
{
"name": "PCP"
},
{
"name": "Pediatrics"
}
],
"id": "937fd51a-9cdc-5458-b936-663f6ce375ac-tgh|8fe022a5-d303-5457-98ab-322fd0f64c07-tgh",
"isAcceptingNewPatients": false,
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": true,
"isReturningPatientEnabled": true,
"name": {
"first": "Vinita",
"last": "Kiluk",
"middles": [
"C."
]
},
"npi": "1033113485",
"resultType": "clinician",
"@search.features": {
"NewClinic": {
"similarityScore": 0
},
"NewVideo": {
"similarityScore": 0
},
"FollowUpClinic": {
"similarityScore": 0
},
"FollowUpVideo": {
"similarityScore": 0
},
"languages": {
"similarityScore": 2
},
"specialties.name": {
"similarityScore": 3
}
},
"@search.distance": {
"type": "absolute",
"miles": 2400.394606215234,
"numeric": 41.17035847283433
},
"departments": [
{
"address": {
"addressLine1": "17 Davis Blvd",
"city": "Tampa",
"country": "US",
"county": "Hillsborough County",
"latitude": 27.936125,
"longitude": -82.45941599999999,
"postalCode": "33606",
"state": "FL"
},
"displayName": "USF Department of Pediatrics",
"emrIdentifier": {
"emrId": "tghlocation_161"
},
"fax": "8132598710",
"id": "8fe022a5-d303-5457-98ab-322fd0f64c07",
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "8138218700",
"resultType": "department",
"timezone": "",
"url": "https://www.getcare.tgh.org/locations/fl/tampa/usf-department-of-pediatrics-tghlocation_161"
}
],
"badges": [
"Languages: Spanish",
"Conditions Treated: Pediatrics",
"Department Name: USF Department of Pediatrics"
],
"distances": [
2400.394606215234
],
"imageUrl": null
}
],
"skip": "3,0",
"cliniciansCount": 265,
"geoip": {
"success": true,
"error": null,
"disclaimer": "This service may only be used by DexCare, Inc. products and services.",
"ip": "99.112.68.46",
"city": "San Francisco",
"state": "CA",
"coordinates": {
"lat": 37.7825,
"lng": -122.435
},
"type": "ip"
}
}
Searching for Departments By Distance
In this example we will use the search endpoint to find family medicine departments sorted by distance from an address. To do this we will:
- set the
departments
flag to “true” and theproviders
flag to false - set the
search
parameter of “family medicine” - provider a specific street address. for the
location
parameter
Example Request
curl --location 'womphealthtestapi.azurewebsites.net/api/OmniSearch?type=search&brand=demo&departments=true&providers=false&top=3&search=family%20medicine&location=400+Broad+St%2C+Seattle%2C+WA' \
--header 'Accept: application/json'
Example Response
{
"info": {
"search": "cancer",
"filters": [
{
"value": "cancer",
"text": "cancer",
"facets": [],
"auto": true
}
],
"locations": [],
"facets": {},
"any": false,
"some": false,
"type": [],
"matches": [
"tgh cancer institute south tampa",
"tampa general hospital cancer institute",
"tgh cancer institute st. petersburg"
],
"providerPosts": [],
"locationPosts": [
{
"search": "cancer",
"top": 3,
"highlightPreTag": "<strong>",
"highlightPostTag": "</strong>",
"skip": 0,
"orderby": [
{
"type": "score"
}
],
"match": {
"type": "or",
"matches": [
{
"type": "term",
"text": "cancer"
},
{
"type": "term",
"text": "hospital cancer institute"
}
]
},
"geolocation": {
"success": true,
"error": null,
"disclaimer": "This service may only be used by DexCare, Inc. products and services.",
"ip": "127.0.0.1",
"city": "San Francisco",
"state": "CA",
"coordinates": {
"lat": 37.7952,
"lng": -122.4028
},
"type": "ip"
}
}
]
},
"results": [
{
"@search.score": 0.1467210786604874,
"@search.highlights": {
"displayName": [
"<strong>TMBG</strong>"
]
},
"specialties": [],
"address": {
"addressLine1": "1313 Mockingbird Lane",
"city": "Mockingbird Heights,
"country": "US",
"county": "Los Angeles",
"latitude": 34.1371,
"longitude": -118.3533,
"postalCode": "91608",
"state": "CA"
},
"brandName": "tgh",
"displayName": "TGH Cancer Institute South Tampa",
"emrIdentifier": {
"emrId": "yourorglocation_1002",
"emrSystemId": "yourorg"
},
"fax": "5555552001",
"id": "12349175-155d-53d0-a37e-7c892a9b1673",
"isAcceptingNewPatients": false,
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "5555552000",
"resultType": "department",
"url": "https://www.getcare.yourorg.org/locations/ca/la/etc",
"@search.features": {
"NewClinic": {
"similarityScore": 0
},
"NewVideo": {
"similarityScore": 0
},
"FollowUpClinic": {
"similarityScore": 0
},
"FollowUpVideo": {
"similarityScore": 0
},
"displayName": {
"similarityScore": 5
}
},
"@search.distance": {
"type": "absolute",
"miles": 2398.904239227494,
"numeric": 41.144504678265314
},
"clinicians": [],
"badges": [
"Name: TMBG"
],
"distance": 2398.904239227494
},
{
"@search.score": 0.14604217280773008,
"@search.highlights": {
"displayName": [
"<strong>TMBG</strong>"
]
},
"specialties": [],
"address": {
"addressLine1": "1313 Mockingbird Lane",
"city": "Mockingbird Heights,
"country": "US",
"county": "Los Angeles",
"latitude": 34.1371,
"longitude": -118.3533,
"postalCode": "91608",
"state": "CA"
},
"brandName": "yourbrand",
"displayName": "TMBG",
"emrIdentifier": {
"emrId": "tghlocation_78",
"emrSystemId": "tampa-clearwave"
},
"fax": "5555551001",
"id": "1234620b-617b-566f-96f7-9c2311e4063d",
"imageUrl": "https://www.yourorg.org/-/media/dexcare/location/1234.jpg",
"isAcceptingNewPatients": false,
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "5555551000",
"resultType": "department",
"url": "https://www.getcare.yourorg.org/locations/ca/la/tmbg",
"@search.features": {
"NewClinic": {
"similarityScore": 0
},
"NewVideo": {
"similarityScore": 0
},
"FollowUpClinic": {
"similarityScore": 0
},
"FollowUpVideo": {
"similarityScore": 0
},
"displayName": {
"similarityScore": 5
}
},
"@search.distance": {
"type": "absolute",
"miles": 2400.3985268507536,
"numeric": 41.17084238746305
},
"clinicians": [],
"badges": [
"Name: TMBG"
],
"distance": 2400.3985268507536
},
{
"@search.score": 0.14686883182816682,
"@search.highlights": {
"displayName": [
"<strong>TMBG</strong>"
]
},
"specialties": [],
"address": {
"1313 Mockingbird Lane",
"city": "Mockingbird Heights,
"country": "US",
"county": "Los Angeles",
"latitude": 34.1371,
"longitude": -118.3533,
"postalCode": "91608",
"state": "CA"
},
"brandName": "tgh",
"displayName": "TGH Cancer Institute St. Petersburg",
"emrIdentifier": {
"emrId": "tghlocation_1001",
"emrSystemId": "tampa-clearwave"
},
"id": "123457f9-ae2c-5b12-87d6-4356b4990194",
"isAcceptingNewPatients": false,
"isBookableOnline": false,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": false,
"isReturningPatientEnabled": false,
"phoneNumber": "5555551000",
"resultType": "department",
"url": "https://www.getcare.tgh.org/locations/fl/st.-petersburg/tgh-cancer-institute-st.-petersburg-tghlocation_1001",
"@search.features": {
"NewClinic": {
"similarityScore": 0
},
"NewVideo": {
"similarityScore": 0
},
"FollowUpClinic": {
"similarityScore": 0
},
"FollowUpVideo": {
"similarityScore": 0
},
"displayName": {
"similarityScore": 5
}
},
"@search.distance": {
"type": "absolute",
"miles": 2394.3928325869883,
"numeric": 41.02563081234169
},
"clinicians": [],
"badges": [
"Name: TMBG"
],
"distance": 2394.3928325869883
}
],
"skip": "0,3",
"departmentsCount": 11,
"geoip": {
"success": true,
"error": null,
"disclaimer": "This service may only be used by DexCare, Inc. products and services.",
"ip": "127.0.0.1",
"city": "San Francisco",
"state": "CA",
"coordinates": {
"lat": 37.7952,
"lng": -122.4028
},
"type": "ip"
}
}
Searching Using Facets
Any field marked as “facet-able” in the your configuration may be used as a search parameter to the search endpoint. For instance in the example below we set our search parameters to be gender
= “female” and specialties.name
is set to “psychiatrist”
Example Request
/api/OmniSearch?brand=tgh&type=search&gender=female&specialties.name=psychiatrist
Example Response
{
"info": {
"search": "",
"filters": [
{
"value": "female",
"facets": [
{
"name": "gender",
"value": "female"
}
]
},
{
"value": "psychiatrist",
"facets": [
{
"name": "specialties.name",
"value": "psychiatrist"
}
]
}
],
"facets": {
"gender": [
"female"
],
"specialties.name": [
"psychiatrist"
]
},
"any": true,
"some": false,
"type": [
"gender",
"specialties.name"
],
"matches": [
"female"
]
},
"results": [
{
"@search.score": 0.2059890135529591,
"@search.highlights": {
"gender": [
"<strong>female</strong>"
]
},
"id": "b66981bd-84f2-5e81-b7c3-68fa5c83defe-tgh|270d28fe-9f8c-5bfc-816d-7ffa0016d153-tgh",
"bio": "Dr. [Name] is a board-certified osteopathic family medicine physician. They earned their medical degree from a recognized institution and completed their residency in family medicine at a reputable medical center, where they held the role of chief resident during their final year.",
"credentials": [
"DO"
],
"emrIdentifiers": [
{
"emrId": "123456"
}
],
"imageUrl": "https://www.yourorg.org/-/media/dexcare/provider/12345.jpg",
"isAcceptingNewPatients": true,
"isBookableOnline": true,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": true,
"isReturningPatientEnabled": true,
"name": {
"first": "Jane",
"last": "Doe",
"middles": [
""
]
},
"networks": [],
"npi": "1962672584",
"profileUrls": [
{
"brandName": "yourbrand",
"url": "https://www.getcare.yourorf.org/providers/jane-doe-1234"
}
],
"resultType": "clinician",
"reviews": [],
"subSpecialties": [
{
"name": "Family Medicine"
},
{
"name": "Primary Care"
},
{
"name": "PCP"
}
],
"@search.features": {
"gender": {
"similarityScore": 2
},
"NewClinic": {
"similarityScore": 5
},
"NewVideo": {
"similarityScore": 0
},
"FollowUpClinic": {
"similarityScore": 0.5
},
"FollowUpVideo": {
"similarityScore": 0
}
},
"@search.distance": {
"type": "absolute",
"miles": 2408.4990861604315,
"numeric": 41.26436242126523
},
"departments": [
{
"address": {
"addressLine1": "1313 Mockingbird Lane",
"city": "Mockingbird Heights,
"country": "US",
"county": "Los Angeles",
"latitude": 34.1371,
"longitude": -118.3533,
"postalCode": "91608",
"state": "CA"
},
"displayName": "TMBG",
"emrIdentifier": {
"emrId": "102049001"
},
"fax": "8138441141",
"id": "270d28fe-9f8c-5bfc-816d-7ffa0016d153",
"isBookableOnline": true,
"isBookablePhone": false,
"isBookableVirtual": false,
"isNewPatientEnabled": true,
"isReturningPatientEnabled": false,
"phoneNumber": "8138447500",
"resultType": "department",
"timezone": "America/Lost_Angeles",
"url": "https://www.getcare.yourorg.org/locations/ca/tmbg"
}
],
"badges": [
"Gender: female"
],
"distances": [
2408.4990861604315
]
}
],
"categories": [],
"facets": [],
"skip": "1,0",
"providersCount": 541,
"@odata.count": 541,
"geoip": {
"success": true,
"error": null,
"disclaimer": "This service may only be used by DexCare, Inc. products and services.",
"ip": "127.0.0.1",
"city": "San Francisco",
"state": "CA",
"coordinates": {
"lat": 37.7952,
"lng": -122.4028
},
"type": "ip"
}
}
Autocomplete Queries
Autocomplete type
queries will generate suggested queries based on the text provider in the search
property.
Suggestions for the search word “pre”
Example Request
curl --location 'womphealthtestapi.azurewebsites.net/api/OmniSearch?type=autocomplete&brand=demo&top=3&search=pre' \
--header 'Accept: application/json'
Example Response
{
"@odata.context": "https://womphealth-search-demo.search.windows.net/indexes('providers-test-alias')/$metadata#Collection(Microsoft.Azure.Search.V2021_04_30_Preview.AutocompleteItem)",
"value": [
{
"text": "preventive",
"queryPlusText": "<strong>preventive</strong>"
}
]
}
Retrieving Synonyms
Use the Omni Synonyms API endpoint /api/OmniSynonyms
to test search terms and view the expanded results, including synonyms like family medicine and internal medicine.
This endpoint will return a list of synonyms as a string array.
For instance you could use the following curl
request to see what synonyms are returned for the keyword “headache” from our test server for the “piedmont” brand
:
Example Request
curl 'https://womphealthtestapi.azurewebsites.net/api/OmniSynonyms?brand=piedmont&search=headache'
Example Response
{
"synonyms": [
"headache medicine",
"internal medicine",
"neurohospitalist",
...
"vertex headaches"
]
}
Frequently Asked Questions
How Often is Omni Search Data Updated?
The data used by Omni Search is reindexed every 15 minutes to ensure what is displayed in search results is up to date.
A refresh of the cache data may be invoked programmatically using the /api/OmniCacheService
endpoint.