Skip to content

Migration issues Templates and Dynamic queries #8189

Closed
@franquiroz

Description

@franquiroz

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions