Skip to content

Can-Sahin/StackExchange.Redis.WordSearch

Repository files navigation

StackExchange.Redis.WordSearch

AutoComplete, Word Search extension for StackExchange.Redis implemented with internal Redis Data Structures. Extra features:

  1. Raw/serialized data attachment to a searchable word.
  2. Popularity Ranking

Requirements

  1. .NET Standards 1.6
  2. StackExchange.Redis 1.2.6

Installation

PM> Install-Package StackExchange.Redis.WordSearch

or

$ dotnet add package StackExchange.Redis.WordSearch

See the docs for usage and examples

Basic Usage

For basic AutoCompletion:

//  IDatabase database = ConnectionMultiplexer.GetDatabase();
    IRedisWordSearch redisSearch = new RedisWordSearch(database); //Use IRedisWordSearch to see the xml documentation
    redisSearch.Add("IdOfWatson", "EmmaWatson");
    redisSearch.Add("IdOfStone", "EmmaStone");

    List<string> results = redisSearch.Search("Emm").AsStringList();
    // ["EmmaWatson", "EmmaStone"]
    // Also supports "mma" style searches

Ranking Popular Searches:

//  IDatabase database = ConnectionMultiplexer.GetDatabase();
    RedisWordSearchConfiguration config = RedisWordSearchConfiguration.defaultConfig;
    config.RankingProvider = new CurrentlyPopularRanking(ANCHOR_EPOCH, 24); //24 hours half life

    IRedisWordSearch redisSearch = new RedisWordSearch(database, config);
    redisSearch.Add("IdOfWatson", "EmmaWatson");
    redisSearch.Add("IdOfStone", "EmmaStone");

    // Typically when application-side clicks/votes/interacts to a search result
    redisSearch.BoostInRanking("IdOfStone");
    redisSearch.BoostInRanking("IdOfWatson");
    redisSearch.BoostInRanking("IdOfWatson");
    List<string> results = redisSearch.Search("Emma").AsStringList();
    // ["EmmaWatson", "EmmaStone"] EmmaWatson is ordered first because she is twice as popular

    var words = redisSearch.TopRankedSearches().AsStringList();
    // ["EmmaWatson", "EmmaStone"] EmmaWatson is ordered first because she is twice as popular

See the docs for detailed Ranking explanation

Serialized Data:

// IDatabase database = ConnectionMultiplexer.GetDatabase();
    RedisWordSearchConfiguration config = RedisWordSearchConfiguration.defaultConfig;
    config.Serializer = new MyJsonSerializer();

    IRedisWordSearch wordSearch = new RedisWordSearch(database,config);
    wordSearch.Add("IdOfWatson", "EmmaWatson", new PartnerForEmma("HarryPotter"));
    wordSearch.Add("IdOfStone", "EmmaStone", new PartnerForEmma("PeterParker"));

    List<PartnerOfEmma> results = wordSearch.Search<PartnerOfEmma>("Emma");

Use RedisWordSearchConfiguration to:

  • Enable Popularity Ranking (default half life decay rate algorithm is implemented)
  • Limit min/max search length
  • Put Redis Key Prefix
  • Enable Case Insensivity
  • Specify searching method (autocomplete sequentially or autocomplete fuzzy search("mma" for searching "EmmaWatson")

For details: docs

License

MIT

About

AutoCompletion/WordSearch extension for StackExchange.Redis

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages