protected IndexOperation SearchText(List <DomainId>?expected, string text, SearchScope target = SearchScope.All) { return(async p => { var query = new TextQuery(text, TextFilter.ShouldHaveSchemas(schemaId.Id)); var result = await p.TextIndex.SearchAsync(app, query, target); if (expected != null) { result.Should().BeEquivalentTo(expected.ToHashSet()); } else { result.Should().BeEmpty(); } }); }
private async Task TransformFilterAsync(ClrQuery query, Context context, ISchemaEntity?schema) { if (query.Filter != null && schema != null) { query.Filter = await GeoQueryTransformer.TransformAsync(query.Filter, context, schema, textIndex); } if (!string.IsNullOrWhiteSpace(query.FullText)) { if (schema == null) { throw new InvalidOperationException(); } var textQuery = new TextQuery(query.FullText, TextFilter.ShouldHaveSchemas(schema.Id)); var fullTextIds = await textIndex.SearchAsync(context.App, textQuery, context.Scope()); var fullTextFilter = ClrFilter.Eq("id", "__notfound__"); if (fullTextIds?.Any() == true) { fullTextFilter = ClrFilter.In("id", fullTextIds.Select(x => x.ToString()).ToList()); } if (query.Filter != null) { query.Filter = ClrFilter.And(query.Filter, fullTextFilter); } else { query.Filter = fullTextFilter; } query.FullText = null; } }