You are currently browsing legacy 4.1 version of documentation. Click here to switch to the newest 4.2 version.

We can help you with migration to the latest RavenDB

Contact Us Now
see on GitHub

Session: Querying: How to Work with Suggestions

The suggestion feature is available through query extension methods. It gives you the ability to find word similarities using string distance algorithms.

Syntax

ISuggestionDocumentQuery<T> suggestUsing(SuggestionBase suggestion);

ISuggestionDocumentQuery<T> suggestUsing(Consumer<ISuggestionBuilder<T>> builder);

Parameters
suggestion SuggestionBase Defines the type of suggestion that should be executed
builder Consumer<ISuggestionBuilder<T>> Builder with a fluent API that constructs a SuggestionBase instance

Builder

ISuggestionOperations<T> byField(String fieldName, String term);

ISuggestionOperations<T> byField(String fieldName, String[] terms);

ISuggestionOperations<T> withOptions(SuggestionOptions options);

Parameters
fieldName String Points to the index field that should be used for operation
term String Term that will be used as a basis of the suggestions
terms String[] Terms that will be used as a basis of the suggestions
options SuggestionOptions Non-default options that should be used for operation

Options

private int pageSize = 15;

private StringDistanceTypes distance = StringDistanceTypes.LEVENSHTEIN;

private Float accuracy = 0.5f;

private SuggestionSortMode sortMode = SuggestionSortMode.POPULARITY;

// getters and setters for fields listed above

Options
pageSize int Maximum number of suggestions that will be returned
distance StringDistanceTypes String distance algorithm to use (NONE, LEVENSTEIN, JARO_WINKLER, N_GRAM)
accuracy Float Suggestion accuracy
sortMode SuggestionSortMode Indicates in what order the results should be returned (None, Popularity)

Example I

SuggestionOptions options = new SuggestionOptions();
options.setAccuracy(0.4f);
options.setPageSize(5);
options.setDistance(StringDistanceTypes.JARO_WINKLER);
options.setSortMode(SuggestionSortMode.POPULARITY);

Map<String, SuggestionResult> suggestions = session
    .query(Employee.class, Employees_ByFullName.class)
    .suggestUsing(builder ->
        builder.byField("FullName", "johne")
            .withOptions(options))
    .execute();
from index 'Employees/ByFullName' 
select suggest('FullName', 'johne', '{ "Accuracy" : 0.4, "PageSize" : 5, "Distance" : "JaroWinkler", "SortMode" : "Popularity" }')

Example II

SuggestionWithTerm suggestionWithTerm = new SuggestionWithTerm("FullName");
suggestionWithTerm.setTerm("johne");

Map<String, SuggestionResult> suggestions = session
    .query(Employee.class, Employees_ByFullName.class)
    .suggestUsing(suggestionWithTerm)
    .execute();
from index 'Employees/ByFullName' 
select suggest('FullName', 'johne')