public List <Item> Search(List <string> text)
        {
            // perform 3 queries in a single API call:
            //  - 1st query targets index `categories`
            //  - 2nd and 3rd queries target index `products`
            var indexQueries = new List <MultipleQueries>();

            foreach (var item in text)
            {
                indexQueries.Add(new MultipleQueries()
                {
                    IndexName = "Items", Params = new Query(item)
                });
            }

            MultipleQueriesRequest request = new MultipleQueriesRequest
            {
                Requests = indexQueries
            };

            SearchClient client = new SearchClient("BIW6EL1FTD", "8ae9274c008b76fdd8046bd43447044b");
            SearchIndex  index  = client.InitIndex("Items");

            var res = client.MultipleQueries <Item>(request);

            List <Item> results = new List <Item>();

            foreach (var item in res.Results)
            {
                results = results.Union(item.Hits).ToList();
            }
            ;

            return(results.Distinct(new ItemComparer()).ToList());
        }
Exemple #2
0
        /// <inheritdoc />
        public async Task <MultipleQueriesResponse <T> > MultipleQueriesAsync <T>(MultipleQueriesRequest request,
                                                                                  RequestOptions requestOptions = null, CancellationToken ct = default) where T : class
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            return(await _transport.ExecuteRequestAsync <MultipleQueriesResponse <T>, MultipleQueriesRequest>(
                       HttpMethod.Post,
                       "/1/indexes/*/queries", CallType.Read, request, requestOptions, ct)
                   .ConfigureAwait(false));
        }
Exemple #3
0
 /// <inheritdoc />
 public MultipleQueriesResponse <T> MultipleQueries <T>(MultipleQueriesRequest request,
                                                        RequestOptions requestOptions = null) where T : class =>
 AsyncHelper.RunSync(() => MultipleQueriesAsync <T>(request, requestOptions));
        public async Task TestMultipleOperations()
        {
            var objectsToSave = new List <BatchOperation <MultipleOperationClass> >
            {
                new BatchOperation <MultipleOperationClass>
                {
                    IndexName = _indexName1, Action = BatchActionType.AddObject,
                    Body      = new MultipleOperationClass {
                        Firstname = "Jimmie"
                    }
                },
                new BatchOperation <MultipleOperationClass>
                {
                    IndexName = _indexName1, Action = BatchActionType.AddObject,
                    Body      = new MultipleOperationClass {
                        Firstname = "Jimmie"
                    }
                },
                new BatchOperation <MultipleOperationClass>
                {
                    IndexName = _indexName2, Action = BatchActionType.AddObject,
                    Body      = new MultipleOperationClass {
                        Firstname = "Jimmie"
                    }
                },
                new BatchOperation <MultipleOperationClass>
                {
                    IndexName = _indexName2, Action = BatchActionType.AddObject,
                    Body      = new MultipleOperationClass {
                        Firstname = "Jimmie"
                    }
                }
            };

            var saveMultiple = await BaseTest.SearchClient.MultipleBatchAsync(objectsToSave);

            saveMultiple.Wait();

            var objectsToRetrieve = new List <MultipleGetObject>
            {
                new MultipleGetObject {
                    IndexName = _indexName1, ObjectID = saveMultiple.ObjectIDs.ElementAt(0)
                },
                new MultipleGetObject {
                    IndexName = _indexName1, ObjectID = saveMultiple.ObjectIDs.ElementAt(1)
                },
                new MultipleGetObject {
                    IndexName = _indexName2, ObjectID = saveMultiple.ObjectIDs.ElementAt(2)
                },
                new MultipleGetObject {
                    IndexName = _indexName2, ObjectID = saveMultiple.ObjectIDs.ElementAt(3)
                }
            };

            var multipleGet =
                await BaseTest.SearchClient.MultipleGetObjectsAsync <MultipleOperationClass>(objectsToRetrieve);

            Assert.True(multipleGet.Results.Count() == 4);
            Assert.True(multipleGet.Results.All(x => x.Firstname.Equals("Jimmie")));

            for (int i = 0; i < 4; i++)
            {
                Assert.True(multipleGet.Results.ElementAt(i).ObjectID == saveMultiple.ObjectIDs.ElementAt(i));
            }

            List <MultipleQueries> multipleSearch = new List <MultipleQueries>
            {
                new MultipleQueries {
                    IndexName = _indexName1, Params = new Query {
                        HitsPerPage = 2
                    }
                },
                new MultipleQueries {
                    IndexName = _indexName2, Params = new Query {
                        HitsPerPage = 2
                    }
                },
            };

            MultipleQueriesRequest request = new MultipleQueriesRequest
            {
                Strategy = StrategyType.None,
                Requests = multipleSearch
            };

            MultipleQueriesRequest request2 = new MultipleQueriesRequest
            {
                Strategy = StrategyType.StopIfEnoughMatches,
                Requests = multipleSearch
            };

            var multiQueri = await BaseTest.SearchClient.MultipleQueriesAsync <MultipleOperationClass>(request);

            var multiQueri2 = await BaseTest.SearchClient.MultipleQueriesAsync <MultipleOperationClass>(request2);

            Assert.True(multiQueri.Results.Count() == 2);
            Assert.True(multiQueri.Results.ElementAt(0).Hits.Count() == 2);
            Assert.True(multiQueri.Results.ElementAt(1).Hits.Count() == 2);

            Assert.True(multiQueri2.Results.Count() == 2);
            Assert.True(multiQueri2.Results.ElementAt(0).Hits.Count() == 2);
            Assert.True(!multiQueri2.Results.ElementAt(1).Hits.Any());
        }