The List Search application has main components:
- QnAMaker: A set of resources that comprise the QnAMaker service that indexes the SharePoint list and returns results. The SharePoint list data populates QnAMaker knowledgebases, which return answers to the user's messaging extension queries.
Messaging Extension: An Azure App Service web app that implements the following functionality:
- Messaging extension
- Task module for the search interface
- Logic to refresh the QnAMaker knowledge bases (triggered by an Azure Logic App)
- Configuration Application: An Azure App Service that lets app admins configure the SharePoint lists that can be searched with the messaging extension.
List Search uses QnAMaker to index the SharePoint list data and respond to queries. QnAMaker takes care of stemming and matching close variants. As QnAMaker continually updates its matching and ranking algorithms, and List Search automatically gets better.
For more details about QnAMaker, please refer to the QnAMaker documentation.
The app implements an action-based command to launch the search experience in a task module. The task module is a embedded page in which the user selects the list to search, then searches the list by entering a query string. The page sends the query string to a search endpoint on the app and then displays the current set of results. When the user has picked an item to share, the page completes the messaging extension flow by dropping a result card into the compose box.
The app exposes an endpoint that triggers a refresh of the knowledge bases, at the interval specified when the list was configured. A logic app pings this endpoint every 6 hours, but note that we don't refresh the knowledge base until after the configured refresh interval for the list has elapsed.
The configuration app is a standard ASP.NET MVC 5 web app. The configuration app will be used infrequently, so the included ARM template puts it in the same App Service Plan as the messaging extension and QnAMaker search.
The configuration app offers Create/Read/Update/Delete (CRUD) operations on the set of stickers. When the admin is satisfied with the set of stickers to return, she updates the stickers configuration file used by the messaging extension by pressing a button in the web app.