Search
Prerequisite
Indexing has to be set-up before moving on to Search-related functionalities. For more details, please refer to https://luminoslabs.atlassian.net/wiki/spaces/HC/pages/3717988426
Overall Approach
In order to search without restrictions, using the full potential of Hawksearch, the connector provides the Optimizely.Hawksearch.Client package. This package contains classes which will correspond to the requests and responses provided by Hawksearch’s Search API.
SearchRequest
SearchResponse
It also provides a client class named SearchClient that will be responsible for calling the mentioned APIs and for deserializing the responses.
For a better experience and easier development, we included in the Optimizely.Hawksearch.Connector package:
Request builders → Fluent APIs to create a search request
Search filters → Used for searching with facets
The Flow
Using only Optimizely.Hawksearch.Client
Create and populate a SearchRequest object
Use the Search method of the SearchClient class (or its async counterpart)
public SearchResponse<T> Search<T>(SearchRequest searchRequest) where T : HawksearchBaseItem public async Task<SearchResponse<T>> SearchAsync<T>(SearchRequest searchRequest) where T : HawksearchBaseItem
Get the SearchResponse object then map it to your business models
Â
Using both
Optimizely.Hawksearch.Client and Optimizely.Hawksearch.Connector
Create and populate a SearchQuery object
Build a SearchRequest object by passing the created SearchQuery object to a SearchRequestBuilder and its Fluent API
Use one of the Search methods of the SearchClient class shown above
Get the SearchResponse object then map it to your business models
A high-level example:
var searchQuery = new SearchQuery
{
Keyword = "jacket",
Page = 1,
PageSize = 5
};
var results = Search(searchQuery);
public ProductSearchResults Search(SearchQuery searchQuery)
{
var searchRequest = new SearchRequestBuilder()
.PublishedOnly()
.WithQueryOn(HawksearchConstants.PropertyNames.ItemType,
HawksearchConstants.DocumentTypes.Product, FieldSearchType.Keyword)
.ForLanguage("en")
.InMarket("US")
.InCatalog(0)
.Build(searchQuery);
//SearchClient _client
var searchResponse = _client.Search<HawksearchProductItem>(searchRequest);
var mappedResponse = MapResults(searchResponse);
return mappedResponse;
}
Â