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) ...@@ -138,6 +138,31 @@ public async Task<SearchResult> SearchAsync(Query q)
return new SearchResult(resp, !q.NoContent, q.WithScores, q.WithPayloads); 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> /// <summary>
/// Add a single document to the query /// Add a single document to the query
/// </summary> /// </summary>
......
...@@ -15,7 +15,8 @@ public enum FieldType ...@@ -15,7 +15,8 @@ public enum FieldType
{ {
FullText, FullText,
Geo, Geo,
Numeric Numeric,
Tag
} }
public class Field public class Field
...@@ -40,6 +41,7 @@ object GetForRedis(FieldType type) ...@@ -40,6 +41,7 @@ object GetForRedis(FieldType type)
case FieldType.FullText: return "TEXT".Literal(); case FieldType.FullText: return "TEXT".Literal();
case FieldType.Geo: return "GEO".Literal(); case FieldType.Geo: return "GEO".Literal();
case FieldType.Numeric: return "NUMERIC".Literal(); case FieldType.Numeric: return "NUMERIC".Literal();
case FieldType.Tag: return "TAG".Literal();
default: throw new ArgumentOutOfRangeException(nameof(type)); default: throw new ArgumentOutOfRangeException(nameof(type));
} }
} }
...@@ -129,5 +131,36 @@ public Schema AddSortableNumericField(string name) ...@@ -129,5 +131,36 @@ public Schema AddSortableNumericField(string name)
return this; 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