add vector payload value operator
This commit is contained in:
parent
34f04e7f1a
commit
58eb254f1b
|
|
@ -5,7 +5,7 @@ namespace BotSharp.Abstraction.VectorStorage.Models;
|
||||||
public class VectorFilterGroup
|
public class VectorFilterGroup
|
||||||
{
|
{
|
||||||
[JsonPropertyName("filters")]
|
[JsonPropertyName("filters")]
|
||||||
public List<VectorFilterSubGroup>? Filters { get; set; }
|
public IEnumerable<VectorFilterSubGroup>? Filters { get; set; }
|
||||||
|
|
||||||
[JsonPropertyName("logical_operator")]
|
[JsonPropertyName("logical_operator")]
|
||||||
public string LogicalOperator { get; set; } = "or";
|
public string LogicalOperator { get; set; } = "or";
|
||||||
|
|
@ -14,7 +14,7 @@ public class VectorFilterGroup
|
||||||
public class VectorFilterSubGroup
|
public class VectorFilterSubGroup
|
||||||
{
|
{
|
||||||
[JsonPropertyName("operands")]
|
[JsonPropertyName("operands")]
|
||||||
public List<VectorFilterOperand> Operands { get; set; } = [];
|
public IEnumerable<VectorFilterOperand> Operands { get; set; } = [];
|
||||||
|
|
||||||
[JsonPropertyName("logical_operator")]
|
[JsonPropertyName("logical_operator")]
|
||||||
public string LogicalOperator { get; set; } = "or";
|
public string LogicalOperator { get; set; } = "or";
|
||||||
|
|
@ -52,7 +52,7 @@ public class VectorFilterRange
|
||||||
public string Key { get; set; } = null!;
|
public string Key { get; set; } = null!;
|
||||||
|
|
||||||
[JsonPropertyName("conditions")]
|
[JsonPropertyName("conditions")]
|
||||||
public List<VectorFilterRangeCondition> Conditions { get; set; } = [];
|
public IEnumerable<VectorFilterRangeCondition> Conditions { get; set; } = [];
|
||||||
|
|
||||||
[JsonPropertyName("data_type")]
|
[JsonPropertyName("data_type")]
|
||||||
public VectorPayloadDataType DataType { get; set; } = VectorPayloadDataType.String;
|
public VectorPayloadDataType DataType { get; set; } = VectorPayloadDataType.String;
|
||||||
|
|
@ -60,10 +60,11 @@ public class VectorFilterRange
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
var str = $"Data type: {DataType};";
|
var str = $"Data type: {DataType};";
|
||||||
Conditions?.ForEach(x =>
|
|
||||||
|
foreach (var condition in Conditions)
|
||||||
{
|
{
|
||||||
str += $"{Key} {x.Operator} {x.Value};";
|
str += $"{Key} {condition.Operator} {condition.Value};";
|
||||||
});
|
}
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using BotSharp.Abstraction.VectorStorage.Enums;
|
using BotSharp.Abstraction.VectorStorage.Enums;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
namespace BotSharp.Abstraction.VectorStorage.Models;
|
namespace BotSharp.Abstraction.VectorStorage.Models;
|
||||||
|
|
||||||
|
|
@ -26,33 +27,35 @@ public class VectorPayloadValue
|
||||||
return $"{DataValue} ({DataType})";
|
return $"{DataValue} ({DataType})";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static VectorPayloadValue BuildStringValue(string data)
|
public static VectorPayloadValue BuildStringValue(string data) => new(data, VectorPayloadDataType.String);
|
||||||
{
|
public static VectorPayloadValue BuildIntegerValue(long data) => new(data, VectorPayloadDataType.Integer);
|
||||||
return new(data, VectorPayloadDataType.String);
|
public static VectorPayloadValue BuildIntegerValue(int data) => new(data, VectorPayloadDataType.Integer);
|
||||||
}
|
public static VectorPayloadValue BuildIntegerValue(short data) => new(data, VectorPayloadDataType.Integer);
|
||||||
|
public static VectorPayloadValue BuildIntegerValue(byte data) => new(data, VectorPayloadDataType.Integer);
|
||||||
|
public static VectorPayloadValue BuildDoubleValue(double data) => new(data, VectorPayloadDataType.Double);
|
||||||
|
public static VectorPayloadValue BuildDoubleValue(float data) => new(data, VectorPayloadDataType.Double);
|
||||||
|
public static VectorPayloadValue BuildBooleanValue(bool data) => new(data, VectorPayloadDataType.Boolean);
|
||||||
|
public static VectorPayloadValue BuildDatetimeValue(DateTime data) => new(data, VectorPayloadDataType.Datetime);
|
||||||
|
public static VectorPayloadValue BuildUnkownValue(object data) => new(data, VectorPayloadDataType.Unknown);
|
||||||
|
|
||||||
public static VectorPayloadValue BuildIntegerValue(long data)
|
|
||||||
{
|
|
||||||
return new(data, VectorPayloadDataType.Integer);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static VectorPayloadValue BuildDoubleValue(double data)
|
public static explicit operator VectorPayloadValue(string data) => VectorPayloadValue.BuildStringValue(data);
|
||||||
{
|
public static explicit operator VectorPayloadValue(long data) => VectorPayloadValue.BuildIntegerValue(data);
|
||||||
return new(data, VectorPayloadDataType.Double);
|
public static explicit operator VectorPayloadValue(int data) => VectorPayloadValue.BuildIntegerValue(data);
|
||||||
}
|
public static explicit operator VectorPayloadValue(short data) => VectorPayloadValue.BuildIntegerValue(data);
|
||||||
|
public static explicit operator VectorPayloadValue(byte data) => VectorPayloadValue.BuildIntegerValue(data);
|
||||||
|
public static explicit operator VectorPayloadValue(double data) => VectorPayloadValue.BuildDoubleValue(data);
|
||||||
|
public static explicit operator VectorPayloadValue(float data) => VectorPayloadValue.BuildDoubleValue(data);
|
||||||
|
public static explicit operator VectorPayloadValue(bool data) => VectorPayloadValue.BuildBooleanValue(data);
|
||||||
|
public static explicit operator VectorPayloadValue(DateTime data) => VectorPayloadValue.BuildDatetimeValue(data);
|
||||||
|
|
||||||
public static VectorPayloadValue BuildBooleanValue(bool data)
|
public static implicit operator string(VectorPayloadValue value) => value.DataValue?.ToString() ?? string.Empty;
|
||||||
{
|
public static implicit operator long(VectorPayloadValue value) => long.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
|
||||||
return new(data, VectorPayloadDataType.Boolean);
|
public static implicit operator int(VectorPayloadValue value) => int.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
|
||||||
}
|
public static implicit operator short(VectorPayloadValue value) => short.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
|
||||||
|
public static implicit operator byte(VectorPayloadValue value) => byte.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
|
||||||
public static VectorPayloadValue BuildDatetimeValue(DateTime data)
|
public static implicit operator double(VectorPayloadValue value) => double.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
|
||||||
{
|
public static implicit operator float(VectorPayloadValue value) => float.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
|
||||||
return new(data, VectorPayloadDataType.Datetime);
|
public static implicit operator bool(VectorPayloadValue value) => bool.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
|
||||||
}
|
public static implicit operator DateTime(VectorPayloadValue value) => DateTime.TryParse(value.DataValue?.ToString(), out var res) ? res : default;
|
||||||
|
|
||||||
public static VectorPayloadValue BuildUnkownValue(object data)
|
|
||||||
{
|
|
||||||
return new(data, VectorPayloadDataType.Unknown);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -507,6 +507,7 @@ public class QdrantDb : IVectorDb
|
||||||
|
|
||||||
|
|
||||||
#region Private methods
|
#region Private methods
|
||||||
|
#region Query filter
|
||||||
private Filter? BuildQueryFilter(IEnumerable<VectorFilterGroup>? filterGroups)
|
private Filter? BuildQueryFilter(IEnumerable<VectorFilterGroup>? filterGroups)
|
||||||
{
|
{
|
||||||
if (filterGroups.IsNullOrEmpty())
|
if (filterGroups.IsNullOrEmpty())
|
||||||
|
|
@ -783,6 +784,7 @@ public class QdrantDb : IVectorDb
|
||||||
|
|
||||||
return fieldCondition;
|
return fieldCondition;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
private WithPayloadSelector? BuildPayloadSelector(IEnumerable<string>? payloads)
|
private WithPayloadSelector? BuildPayloadSelector(IEnumerable<string>? payloads)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue