Description
Hi, i'm trying to migrate my app from NEST to Elastic.Clients.Elasticsearch, so, i have found some blocking issues
1. i Cant create PutTemplateAsync with Analisis
NEST: await client.Indices.PutTemplateAsync(templateName,t => t.Settings(s => s.Analysis(a => a.Analyzers(an => an
.Custom("ana_s_lc", ca => ca.Tokenizer("standard").Filters("lowercase")))
.Normalizers(nm => nm.Custom("nor_lc", c => c.Filters("lowercase")))
.Tokenizers(t => t.PathHierarchy("tok_path", p => p.Delimiter('\')))
.TokenFilters(t => t.Lowercase("lowercase"))));
Elastic.Clients.Elasticsearch: Settings(Func<FluentDictionary<string, object> ??????????????)
2. In NEST i can create a dynamic QueryContainer like that:
a. queryfilters &= (new QueryContainerDescriptor<FileEvent>().Term(t => t.Field(f => f.AgentUUID).Value(item.Value)));
b. queryfilters &= (new QueryContainerDescriptor<FileEvent>().Term(t => t.Field(f => f.ProxyConfigurationId).Value(Guid.Empty)));
c. queryfilters &= (new QueryContainerDescriptor<FileEvent>().Bool(b => b.MustNot(m => m.Exists(e => e.Field(f => f.FileName)))));
implementing the options (a, b, c) dynamically if some conditions are complied...
and so on, with more complex filters like:
void ElasticFilter(ref QueryContainer queryfilters, CustomFilter item, Expression<Func<T, object>> field) where T : class
{
QueryContainer qc = null;
var allValues = item.Value.Split("||").Where(w => !string.IsNullOrEmpty(w));
switch (item.Filter)
{
case StringFilterType.Contains:
foreach (var wc in allValues.Select(f => new QueryContainerDescriptor().Wildcard(t => t.Field(field).Value("" + f.Replace("", "").Replace("\", "\\").Trim() + ""))))
{
qc |= wc;
}
queryfilters &= new QueryContainerDescriptor().Bool(b => b.Must(m => qc));
break;
case StringFilterType.NotContains:
foreach (var wc in allValues.Select(f => new QueryContainerDescriptor().Wildcard(t => t.Field(field).Value("" + f.Replace("", "").Replace("\", "\\").Trim() + ""))))
{
qc |= wc;
}
queryfilters &= new QueryContainerDescriptor().Bool(b => b.MustNot(m => qc));
break;
case StringFilterType.Equals:
foreach (var wc in allValues.Select(f => new QueryContainerDescriptor().Term(t => t.Field(field).Value(f.Trim()))))
{
qc |= wc;
}
queryfilters &= new QueryContainerDescriptor().Bool(b => b.Must(m => qc));
break;
case StringFilterType.NotEquals:
foreach (var wc in allValues.Select(f => new QueryContainerDescriptor().Term(t => t.Field(field).Value(f.Trim()))))
{
qc |= wc;
}
queryfilters &= new QueryContainerDescriptor().Bool(b => b.MustNot(m => qc));
break;
case StringFilterType.StartWith:
foreach (var wc in allValues.Select(f => new QueryContainerDescriptor().Prefix(t => t.Field(field).Value(f.Trim()))))
{
qc |= wc;
}
queryfilters &= new QueryContainerDescriptor().Bool(b => b.Must(m => qc));
break;
case StringFilterType.NotStartWith:
foreach (var wc in allValues.Select(f => new QueryContainerDescriptor().Prefix(t => t.Field(field).Value(f.Trim()))))
{
qc |= wc;
}
queryfilters &= new QueryContainerDescriptor().Bool(b => b.MustNot(m => qc));
break;
default:
break;
}
}
I CAN'T REACH ANY ALTERNATIVE SOLUTION FOR ANY OF MY ISSUES
i hope anyone can help me
THX SO MUCH