コード例 #1
0
        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);
        }
コード例 #2
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);
        }