public async Task ShouldSearchAnalyzedFields() { // Arrange if (!await _client.Schema.ExistsAsync(nameof(AnalyzerTestObject)).ConfigureAwait(false)) { var schemas = await _client.Schema.GenerateSchemasAsync(typeof(AnalyzerTestObject)).ConfigureAwait(false); var schemasToCreate = new List <SchemaDetail>(); var schemasToUpdate = new List <SchemaDetail>(); foreach (var schema in schemas) { if (await _client.Schema.ExistsAsync(schema.Id).ConfigureAwait(false)) { schemasToUpdate.Add(schema); } else { schemasToCreate.Add(schema); } } await _client.Schema.CreateManyAsync(schemasToCreate, false, TimeSpan.FromMinutes(1)).ConfigureAwait(false); foreach (var schema in schemasToUpdate) { await _client.Schema.UpdateAsync(schema, true, TimeSpan.FromMinutes(1)).ConfigureAwait(false); } var analyzerValue = new AnalyzerTestObject { EdgeNGramField = "EdgeNGramFieldValue", LanguageField = new TranslatedStringDictionary { { "en", "Cities" } }, NGramField = "NGramFieldValue", PathHierarchyField = "Path/Hierarchy/Field", SimpleField = "Simple12Field" }; var res = await _client.ListItem.CreateFromObjectAsync(analyzerValue).ConfigureAwait(false); var resDetail = await res.FetchDetail().ConfigureAwait(false); resDetail.SucceededItems.Should().NotBeEmpty(); } var requestSchemaIds = new[] { nameof(AnalyzerTestObject) }; var simpleResults = await _client.ListItem.SearchAsync(new ListItemSearchRequest { SchemaIds = requestSchemaIds, Filter = FilterBase.FromExpression <AnalyzerTestObject>(o => o.SimpleField, "simple", Analyzer.Simple) }).ConfigureAwait(false); Assert.True(simpleResults.TotalResults > 0); var pathResults = await _client.ListItem.SearchAsync(new ListItemSearchRequest { SchemaIds = requestSchemaIds, Filter = FilterBase.FromExpression <AnalyzerTestObject>(o => o.PathHierarchyField, "Path/Hierarchy", Analyzer.PathHierarchy) }).ConfigureAwait(false); Assert.True(pathResults.TotalResults > 0); var languageResults = await _client.ListItem.SearchAsync(new ListItemSearchRequest { SchemaIds = requestSchemaIds, Filter = FilterBase.FromExpression <AnalyzerTestObject>(o => o.LanguageField, "citi", language: "en", useAnalyzer: true) }).ConfigureAwait(false); Assert.True(languageResults.TotalResults > 0); var edgeNgramResults = await _client.ListItem.SearchAsync(new ListItemSearchRequest { SchemaIds = requestSchemaIds, Filter = FilterBase.FromExpression <AnalyzerTestObject>(o => o.EdgeNGramField, "edg", Analyzer.EdgeNGram) }).ConfigureAwait(false); Assert.True(edgeNgramResults.TotalResults > 0); var ngramResults = await _client.ListItem.SearchAsync(new ListItemSearchRequest { SchemaIds = requestSchemaIds, Filter = FilterBase.FromExpression <AnalyzerTestObject>(o => o.NGramField, "mfield", Analyzer.NGram) }).ConfigureAwait(false); Assert.True(ngramResults.TotalResults > 0); }
public async Task ShouldSearchAnalyzedFields() { /// Arrange if (await _client.Schemas.ExistsAsync(nameof(AnalyzerTestObject)) == false) { var schemas = await _client.Schemas.GenerateSchemasAsync(typeof(AnalyzerTestObject)); foreach (var schema in schemas) { await _client.Schemas.CreateOrUpdateAndWaitForCompletionAsync(schema, false); } var analyzerValue = new AnalyzerTestObject { EdgeNGramField = "EdgeNGramFieldValue", LanguageField = new TranslatedStringDictionary { { "x-default", "XDefaultValue" }, { "en", "Cities" } }, NGramField = "NGramFieldValue", PathHierarchyField = "Path/Hierarchy/Field", SimpleField = "Simple12Field" }; await _client.ListItems.CreateFromObjectAsync(analyzerValue, nameof(AnalyzerTestObject)); } var simpleResults = await _client.ListItems.SearchAsync(new ListItemSearchRequest { SchemaIds = new List <string> { nameof(AnalyzerTestObject) }, Filter = new TermFilter { Field = "analyzerTestObject.simpleField.simple", // TODO: How to support this with SDK Term = "simple" } }); Assert.True(simpleResults.TotalResults > 0); var pathResults = await _client.ListItems.SearchAsync(new ListItemSearchRequest { SchemaIds = new List <string> { nameof(AnalyzerTestObject) }, Filter = new TermFilter { Field = "analyzerTestObject.pathHierarchyField.pathhierarchy", // TODO: How to support this with SDK Term = "Path/Hierarchy" } }); Assert.True(pathResults.TotalResults > 0); var languageResults = await _client.ListItems.SearchAsync(new ListItemSearchRequest { SchemaIds = new List <string> { nameof(AnalyzerTestObject) }, Filter = new TermFilter { Field = "analyzerTestObject.languageField.en.language", Term = "citi" // TODO: We should use MatchQuery here } }); Assert.True(languageResults.TotalResults > 0); var edgeNgramResults = await _client.ListItems.SearchAsync(new ListItemSearchRequest { SchemaIds = new List <string> { nameof(AnalyzerTestObject) }, Filter = new TermFilter { Field = "analyzerTestObject.edgeNGramField.edgengram", Term = "edg" } }); Assert.True(edgeNgramResults.TotalResults > 0); var ngramResults = await _client.ListItems.SearchAsync(new ListItemSearchRequest { SchemaIds = new List <string> { nameof(AnalyzerTestObject) }, Filter = new TermFilter { Field = "analyzerTestObject.nGramField.ngram", Term = "mfield" } }); Assert.True(ngramResults.TotalResults > 0); }