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()); }
/// <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)); }
/// <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()); }