Our.Umbraco.SearchSpellCheck
1.0.0-beta.8
See the version list below for details.
dotnet add package Our.Umbraco.SearchSpellCheck --version 1.0.0-beta.8
NuGet\Install-Package Our.Umbraco.SearchSpellCheck -Version 1.0.0-beta.8
<PackageReference Include="Our.Umbraco.SearchSpellCheck" Version="1.0.0-beta.8" />
paket add Our.Umbraco.SearchSpellCheck --version 1.0.0-beta.8
#r "nuget: Our.Umbraco.SearchSpellCheck, 1.0.0-beta.8"
// Install Our.Umbraco.SearchSpellCheck as a Cake Addin #addin nuget:?package=Our.Umbraco.SearchSpellCheck&version=1.0.0-beta.8&prerelease // Install Our.Umbraco.SearchSpellCheck as a Cake Tool #tool nuget:?package=Our.Umbraco.SearchSpellCheck&version=1.0.0-beta.8&prerelease
Our.Umbraco.SearchSpellCheck
A Lucene.Net-based spell checker for Umbraco v8 and v9.
This project wouldn't exist without Lars-Erik Aabech who created a v7 version of this, which a lot of the work is based on.
How it works
On startup, this extension will index all the content in your site based on the IndexedFields
settings. On every search, the extension will check the multi-word search term against the index and suggest the most likely words to the user.
Installation
At present, the only way to install this is to use NuGet. You can find the package on NuGet.org and install it using the Package Manager UI in Visual Studio.
Configuration
v9
In v9 you'll need to use the appSettings.json
file instead of the web.config
file.
{
"SearchSpellCheck": {
"IndexName": "SpellCheckIndex",
"IndexedFields": [ "nodeName" ],
"BuildOnStartup": true,
"RebuildOnPublish": true,
"AutoRebuildIndex": false,
"AutoRebuildDelay": 5,
"AutoRebuildRepeat": 30
}
}
v8
When the package is installed, new keys will be added to the appSettings
section of your web.config
:
<add key="Our.Umbraco.SearchSpellCheck.IndexName" value="SpellCheckIndex" />
<add key="Our.Umbraco.SearchSpellCheck.IndexedFields" value="nodeName" />
<add key="Our.Umbraco.SearchSpellCheck.BuildOnStartup" value="true" />
<add key="Our.Umbraco.SearchSpellCheck.RebuildOnPublish" value="true" />
<add key="Our.Umbraco.SearchSpellCheck.AutoRebuildIndex" value="false" />
<add key="Our.Umbraco.SearchSpellCheck.AutoRebuildDelay" value="5" />
<add key="Our.Umbraco.SearchSpellCheck.AutoRebuildRepeat" value="30" />
Settings
IndexName
: The name of the Lucene index to be created. This is the also name of the folder in the App_Data
folder that contains the Lucene index. By default it is SpellCheckIndex
but this can be changed if you need a different naming convention.
IndexedFields
: The alias(es) of fields to be indexed. This is a comma-separated list of field names. By default only the nodeName
field is indexed. Currently, there is support for textstring, textareas, TinyMCE, Grid Layout and Block List Editor fields.
BuildOnStartup
: Boolean indicating if you want the index to be populated on startup. Defaults to true
.
RebuildOnPublish
: Boolean indicating if you want the index to be populated on content being saved and published successfully. Defaults to true
.
AutoRebuildIndex
: Boolean indicating if you want a background process to run to rebuild the index. Defaults to false
.
AutoRebuildDelay
: Number of minutes you want to delay the background process from starting. Defaults to 5
minutes.
AutoRebuildRepeat
: Number of minutes you want the scheduled background process to run. Defaults to 30
minutes.
Usage
v9
The package enables a SuggestionService
to be injected in v9:
private readonly IExamineManager _examineManager;
private readonly ISuggestionService _suggestionService;
public SearchService(IExamineManager examineManager, ISuggestionService suggestionService)
{
_examineManager = examineManager;
_suggestionService = suggestionService;
}
public string GetSuggestions(string searchTerm)
{
return _suggestionService.GetSuggestion(searchTerm, accuracy: 0.25f);
}
Which could in turn be returned in a view component:
if (model.TotalResults == 0)
{
model.SpellCheck = _searchService.GetSuggestions(model.SearchTerm);
}
And then returned in the view:
@if (!string.IsNullOrEmpty(Model.SpellCheck))
{
<p>Did you mean <a href="?s=@Model.SpellCheck"><em>@Model.SpellCheck</em></a>?</p>
}
v8
The package is a single class called Our.Umbraco.SearchSpellCheck.Suggestions
.
Within a SearchService
, you could use the Suggestions
class to get suggestions for a given word:
public string GetSuggestion(string searchTerm)
{
return Suggestions.GetSuggestion(searchTerm);
}
This could then be returned within a ViewModel:
if (!string.IsNullOrEmpty(viewModel.SearchTerm))
{
viewModel.SpellCheck = _searchService.GetSuggestion(viewModel.SearchTerm);
}
And then in your view:
@if (Model.TotalResults == 0 && !string.IsNullOrEmpty(Model.SpellCheck))
{
@:Did you mean <em><a href="?q=@Model.SpellCheck">@Model.SpellCheck</a></em>?
}
License
Copyright © 2021 Rick Butterfield, and other contributors
Licensed under the MIT License.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Framework | net472 is compatible. net48 was computed. net481 was computed. |
-
.NETFramework 4.7.2
- Examine (>= 1.2.0)
- Lucene.Net (>= 3.0.3)
- Lucene.Net.Contrib (>= 3.0.3)
- Skybrud.Umbraco.GridData (>= 3.0.2)
- Skybrud.Umbraco.GridData.Dtge (>= 2.0.0)
- UmbracoCms.Core (>= 8.15.0)
- UmbracoCms.Web (>= 8.15.0)
-
net5.0
- Examine (>= 2.0.0)
- Lucene.Net (>= 4.8.0-beta00014)
- Lucene.Net.Suggest (>= 4.8.0-beta00014)
- Skybrud.Umbraco.GridData (>= 4.0.0-alpha002)
- Umbraco.Cms.Core (>= 9.0.0)
- Umbraco.Cms.Examine.Lucene (>= 9.0.0)
- Umbraco.Cms.Infrastructure (>= 9.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.0-beta.11 | 2,471 | 12/3/2021 |
1.0.0-beta.10 | 2,981 | 11/25/2021 |
1.0.0-beta.9 | 2,634 | 11/25/2021 |
1.0.0-beta.8 | 3,654 | 11/25/2021 |
1.0.0-beta.7 | 183 | 11/22/2021 |
1.0.0-beta.6 | 167 | 11/22/2021 |
1.0.0-beta.5 | 173 | 11/19/2021 |
1.0.0-beta.4 | 195 | 11/19/2021 |
1.0.0-beta.3 | 170 | 11/19/2021 |