Commit b78569f6 authored by rajeshsubhankar's avatar rajeshsubhankar Committed by Marc Gravell

Feature/NRediSearch-TAGS (#749)

* Tag feature added
parent e0810eed
......@@ -138,6 +138,31 @@ public async Task<SearchResult> SearchAsync(Query q)
return new SearchResult(resp, !q.NoContent, q.WithScores, q.WithPayloads);
}
/// <summary>
/// Return Distinct Values in a TAG field
/// </summary>
/// <param name="fieldName">TAG field name</param>
/// <returns>List of TAG field values</returns>
public RedisValue[] TagVals(string fieldName)
{
var resp = (RedisValue[])DbSync.Execute("FT.TAGVALS", _boxedIndexName, fieldName);
return resp;
}
/// <summary>
/// Return Distinct Values in a TAG field
/// </summary>
/// <param name="fieldName">TAG field name</param>
/// <returns>List of TAG field values</returns>
public async Task<RedisValue[]> TagValsAsync(string fieldName)
{
var resp = (RedisValue[])await _db.ExecuteAsync("FT.TAGVALS", _boxedIndexName, fieldName).ConfigureAwait(false);
return resp;
}
/// <summary>
/// Add a single document to the query
/// </summary>
......
......@@ -15,7 +15,8 @@ public enum FieldType
{
FullText,
Geo,
Numeric
Numeric,
Tag
}
public class Field
......@@ -40,6 +41,7 @@ object GetForRedis(FieldType type)
case FieldType.FullText: return "TEXT".Literal();
case FieldType.Geo: return "GEO".Literal();
case FieldType.Numeric: return "NUMERIC".Literal();
case FieldType.Tag: return "TAG".Literal();
default: throw new ArgumentOutOfRangeException(nameof(type));
}
}
......@@ -129,5 +131,36 @@ public Schema AddSortableNumericField(string name)
return this;
}
public class TagField : Field
{
public string Separator { get; }
internal TagField(string name, string separator = ",") : base(name, FieldType.Tag, false)
{
Separator = separator;
}
internal override void SerializeRedisArgs(List<object> args)
{
base.SerializeRedisArgs(args);
if (Separator != ",")
{
args.Add("SEPARATOR".Literal());
args.Add(Separator);
}
}
}
/// <summary>
/// Add a TAG field
/// </summary>
/// <param name="name">the field's name</param>
/// <param name="separator">tag separator</param>
/// <returns>the schema object</returns>
public Schema AddTagField(string name, string separator = ",")
{
Fields.Add(new TagField(name, separator));
return this;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment