/test/SlowTests/Tests/Faceted/FacetedIndexLimit.cs

https://github.com/fitzchak/ravendb · C# · 653 lines · 545 code · 93 blank · 15 comment · 20 complexity · f838e7951305259f78c8c66733e125e0 MD5 · raw file

  1. //-----------------------------------------------------------------------
  2. // <copyright file="FacetedIndex.cs" company="Hibernating Rhinos LTD">
  3. // Copyright (c) Hibernating Rhinos LTD. All rights reserved.
  4. // </copyright>
  5. //-----------------------------------------------------------------------
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using Raven.Client;
  10. using Raven.Client.Documents;
  11. using Raven.Client.Documents.Indexes;
  12. using Raven.Client.Documents.Operations.Indexes;
  13. using Raven.Client.Documents.Queries.Facets;
  14. using Raven.Client.Documents.Session;
  15. using Xunit;
  16. namespace SlowTests.Tests.Faceted
  17. {
  18. public class FacetedIndexLimit : FacetTestBase
  19. {
  20. private readonly IList<Camera> _data;
  21. private const int NumCameras = 1000;
  22. public FacetedIndexLimit()
  23. {
  24. _data = GetCameras(NumCameras);
  25. }
  26. [Fact]
  27. public void CanPerformSearchWithTwoDefaultFacets()
  28. {
  29. var facets = new List<Facet> { new Facet { FieldName = "Manufacturer" }, new Facet { FieldName = "Model" } };
  30. using (var store = GetDocumentStore())
  31. {
  32. Setup(store);
  33. using (var s = store.OpenSession())
  34. {
  35. s.Store(new FacetSetup { Id = "facets/CameraFacets", Facets = facets });
  36. s.SaveChanges();
  37. var facetResults = s.Query<Camera>("CameraCost")
  38. .AggregateUsing("facets/CameraFacets")
  39. .Execute();
  40. Assert.Equal(5, facetResults["Manufacturer"].Values.Count());
  41. Assert.Equal("canon", facetResults["Manufacturer"].Values[0].Range);
  42. Assert.Equal("jessops", facetResults["Manufacturer"].Values[1].Range);
  43. Assert.Equal("nikon", facetResults["Manufacturer"].Values[2].Range);
  44. Assert.Equal("phillips", facetResults["Manufacturer"].Values[3].Range);
  45. Assert.Equal("sony", facetResults["Manufacturer"].Values[4].Range);
  46. foreach (var facet in facetResults["Manufacturer"].Values)
  47. {
  48. var inMemoryCount = _data.Where(x => x.Manufacturer.ToLower() == facet.Range).Count();
  49. Assert.Equal(inMemoryCount, facet.Count);
  50. }
  51. Assert.Equal(new List<string>(), facetResults["Manufacturer"].RemainingTerms);
  52. Assert.Equal(0, facetResults["Manufacturer"].RemainingTermsCount);
  53. Assert.Equal(0, facetResults["Manufacturer"].RemainingHits);
  54. Assert.Equal(5, facetResults["Model"].Values.Count());
  55. Assert.Equal("model1", facetResults["Model"].Values[0].Range);
  56. Assert.Equal("model2", facetResults["Model"].Values[1].Range);
  57. Assert.Equal("model3", facetResults["Model"].Values[2].Range);
  58. Assert.Equal("model4", facetResults["Model"].Values[3].Range);
  59. Assert.Equal("model5", facetResults["Model"].Values[4].Range);
  60. foreach (var facet in facetResults["Model"].Values)
  61. {
  62. var inMemoryCount = _data.Where(x => x.Model.ToLower() == facet.Range).Count();
  63. Assert.Equal(inMemoryCount, facet.Count);
  64. }
  65. Assert.Equal(new List<string>(), facetResults["Model"].RemainingTerms);
  66. Assert.Equal(0, facetResults["Model"].RemainingTermsCount);
  67. Assert.Equal(0, facetResults["Model"].RemainingHits);
  68. }
  69. }
  70. }
  71. [Fact]
  72. public void CanPerformFacetedLimitSearch_TermAsc()
  73. {
  74. var facets = new List<Facet>
  75. {
  76. new Facet
  77. {
  78. FieldName = "Manufacturer",
  79. Options = new FacetOptions
  80. {
  81. PageSize = 2,
  82. //MaxResults = 2,
  83. IncludeRemainingTerms = true
  84. }
  85. }
  86. };
  87. using (var store = GetDocumentStore())
  88. {
  89. Setup(store);
  90. using (var s = store.OpenSession())
  91. {
  92. s.Store(new FacetSetup { Id = "facets/CameraFacets", Facets = facets });
  93. s.SaveChanges();
  94. var facetResults = s.Query<Camera>("CameraCost")
  95. .Where(x => x.DateOfListing > new DateTime(2000, 1, 1))
  96. .AggregateUsing("facets/CameraFacets")
  97. .Execute();
  98. Assert.Equal(2, facetResults["Manufacturer"].Values.Count());
  99. Assert.Equal("canon", facetResults["Manufacturer"].Values[0].Range);
  100. Assert.Equal("jessops", facetResults["Manufacturer"].Values[1].Range);
  101. foreach (var facet in facetResults["Manufacturer"].Values)
  102. {
  103. var inMemoryCount = _data.Where(x => x.DateOfListing > new DateTime(2000, 1, 1)).Where(x => x.Manufacturer.ToLower() == facet.Range).Count();
  104. Assert.Equal(inMemoryCount, facet.Count);
  105. }
  106. Assert.Equal(3, facetResults["Manufacturer"].RemainingTermsCount);
  107. Assert.Equal(3, facetResults["Manufacturer"].RemainingTerms.Count());
  108. Assert.Equal("nikon", facetResults["Manufacturer"].RemainingTerms[0]);
  109. Assert.Equal("phillips", facetResults["Manufacturer"].RemainingTerms[1]);
  110. Assert.Equal("sony", facetResults["Manufacturer"].RemainingTerms[2]);
  111. Assert.Equal(_data.Count(x => x.DateOfListing > new DateTime(2000, 1, 1)),
  112. facetResults["Manufacturer"].Values[0].Count +
  113. facetResults["Manufacturer"].Values[1].Count +
  114. facetResults["Manufacturer"].RemainingHits);
  115. }
  116. }
  117. }
  118. [Fact]
  119. public void CanPerformFacetedLimitSearch_TermDesc()
  120. {
  121. var facets = new List<Facet>
  122. {
  123. new Facet
  124. {
  125. FieldName = "Manufacturer",
  126. Options = new FacetOptions
  127. {
  128. PageSize = 3,
  129. //MaxResults = 3,
  130. TermSortMode = FacetTermSortMode.ValueDesc,
  131. IncludeRemainingTerms = true
  132. }
  133. }
  134. };
  135. using (var store = GetDocumentStore())
  136. {
  137. Setup(store);
  138. using (var s = store.OpenSession())
  139. {
  140. s.Store(new FacetSetup { Id = "facets/CameraFacets", Facets = facets });
  141. s.SaveChanges();
  142. var facetResults = s.Query<Camera>("CameraCost")
  143. .Where(x => x.DateOfListing > new DateTime(2000, 1, 1))
  144. .AggregateUsing("facets/CameraFacets")
  145. .Execute();
  146. Assert.Equal(3, facetResults["Manufacturer"].Values.Count());
  147. Assert.Equal("sony", facetResults["Manufacturer"].Values[0].Range);
  148. Assert.Equal("phillips", facetResults["Manufacturer"].Values[1].Range);
  149. Assert.Equal("nikon", facetResults["Manufacturer"].Values[2].Range);
  150. foreach (var facet in facetResults["Manufacturer"].Values)
  151. {
  152. var inMemoryCount = _data.Where(x => x.DateOfListing > new DateTime(2000, 1, 1)).Where(x => x.Manufacturer.ToLower() == facet.Range).Count();
  153. Assert.Equal(inMemoryCount, facet.Count);
  154. }
  155. Assert.Equal(2, facetResults["Manufacturer"].RemainingTermsCount);
  156. Assert.Equal(2, facetResults["Manufacturer"].RemainingTerms.Count());
  157. Assert.Equal("jessops", facetResults["Manufacturer"].RemainingTerms[0]);
  158. Assert.Equal("canon", facetResults["Manufacturer"].RemainingTerms[1]);
  159. Assert.Equal(_data.Count(x => x.DateOfListing > new DateTime(2000, 1, 1)),
  160. facetResults["Manufacturer"].Values[0].Count +
  161. facetResults["Manufacturer"].Values[1].Count +
  162. facetResults["Manufacturer"].Values[2].Count +
  163. facetResults["Manufacturer"].RemainingHits);
  164. }
  165. }
  166. }
  167. [Fact]
  168. public void CanPerformFacetedLimitSearch_HitsAsc()
  169. {
  170. var facets = new List<Facet>
  171. {
  172. new Facet
  173. {
  174. FieldName = "Manufacturer",
  175. Options = new FacetOptions
  176. {
  177. PageSize = 2,
  178. //MaxResults = 2,
  179. TermSortMode = FacetTermSortMode.CountAsc,
  180. IncludeRemainingTerms = true
  181. }
  182. }
  183. };
  184. using (var store = GetDocumentStore())
  185. {
  186. Setup(store);
  187. using (var s = store.OpenSession())
  188. {
  189. s.Store(new FacetSetup { Id = "facets/CameraFacets", Facets = facets });
  190. s.SaveChanges();
  191. var facetResults = s.Query<Camera>("CameraCost")
  192. .AggregateUsing("facets/CameraFacets")
  193. .Execute();
  194. var cameraCounts = from d in _data
  195. group d by d.Manufacturer
  196. into result
  197. select new { Manufacturer = result.Key, Count = result.Count() };
  198. var camerasByHits = cameraCounts.OrderBy(x => x.Count)
  199. .ThenBy(x => x.Manufacturer).Select(x => x.Manufacturer.ToLower()).ToList();
  200. var manufacturer = facetResults["Manufacturer"];
  201. Assert.Equal(2, manufacturer.Values.Count());
  202. Assert.Equal(camerasByHits[0], manufacturer.Values[0].Range);
  203. Assert.Equal(camerasByHits[1], manufacturer.Values[1].Range);
  204. foreach (var facet in manufacturer.Values)
  205. {
  206. var inMemoryCount = _data.Where(x => x.Manufacturer.ToLower() == facet.Range).Count();
  207. Assert.Equal(inMemoryCount, facet.Count);
  208. }
  209. if (manufacturer.RemainingHits == 2)
  210. {
  211. WaitForUserToContinueTheTest(store, debug: false);
  212. }
  213. Assert.Equal(3, manufacturer.RemainingTermsCount);
  214. Assert.Equal(3, manufacturer.RemainingTerms.Count());
  215. Assert.Equal(camerasByHits[2], manufacturer.RemainingTerms[0]);
  216. Assert.Equal(camerasByHits[3], manufacturer.RemainingTerms[1]);
  217. Assert.Equal(camerasByHits[4], manufacturer.RemainingTerms[2]);
  218. Assert.Equal(_data.Count(),
  219. manufacturer.Values[0].Count +
  220. manufacturer.Values[1].Count +
  221. manufacturer.RemainingHits);
  222. }
  223. }
  224. }
  225. [Fact]
  226. public void CanPerformFacetedLimitSearch_HitsDesc()
  227. {
  228. //also specify more results than we have
  229. var facets = new List<Facet>
  230. {
  231. new Facet
  232. {
  233. FieldName = "Manufacturer",
  234. Options = new FacetOptions
  235. {
  236. PageSize = 20,
  237. //MaxResults = 20,
  238. TermSortMode = FacetTermSortMode.CountDesc,
  239. IncludeRemainingTerms = true
  240. }
  241. }
  242. };
  243. using (var store = GetDocumentStore())
  244. {
  245. Setup(store);
  246. using (var s = store.OpenSession())
  247. {
  248. s.Store(new FacetSetup { Id = "facets/CameraFacets", Facets = facets });
  249. s.SaveChanges();
  250. var facetResults = s.Query<Camera>("CameraCost")
  251. .AggregateUsing("facets/CameraFacets")
  252. .Execute();
  253. var cameraCounts = from d in _data
  254. group d by d.Manufacturer
  255. into result
  256. select new { Manufacturer = result.Key, Count = result.Count() };
  257. var camerasByHits = cameraCounts.OrderByDescending(x => x.Count).ThenBy(x => x.Manufacturer.ToLower()).Select(x => x.Manufacturer.ToLower()).ToList();
  258. Assert.Equal(5, facetResults["Manufacturer"].Values.Count());
  259. Assert.Equal(camerasByHits[0], facetResults["Manufacturer"].Values[0].Range);
  260. if (camerasByHits[1] != facetResults["Manufacturer"].Values[1].Range)
  261. WaitForUserToContinueTheTest(store, debug: false);
  262. Assert.Equal(camerasByHits[1], facetResults["Manufacturer"].Values[1].Range);
  263. Assert.Equal(camerasByHits[2], facetResults["Manufacturer"].Values[2].Range);
  264. Assert.Equal(camerasByHits[3], facetResults["Manufacturer"].Values[3].Range);
  265. Assert.Equal(camerasByHits[4], facetResults["Manufacturer"].Values[4].Range);
  266. foreach (var facet in facetResults["Manufacturer"].Values)
  267. {
  268. var inMemoryCount = _data.Where(x => x.Manufacturer.ToLower() == facet.Range).Count();
  269. Assert.Equal(inMemoryCount, facet.Count);
  270. }
  271. Assert.Equal(0, facetResults["Manufacturer"].RemainingTermsCount);
  272. Assert.Equal(0, facetResults["Manufacturer"].RemainingTerms.Count());
  273. Assert.Equal(0, facetResults["Manufacturer"].RemainingHits);
  274. }
  275. }
  276. }
  277. [Fact]
  278. public void CanPerformSearchWithTwoDefaultFacets_LuceneQuery()
  279. {
  280. var facets = new List<Facet> { new Facet { FieldName = "Manufacturer" }, new Facet { FieldName = "Model" } };
  281. using (var store = GetDocumentStore())
  282. {
  283. Setup(store);
  284. using (var s = store.OpenSession())
  285. {
  286. s.Store(new FacetSetup { Id = "facets/CameraFacets", Facets = facets });
  287. s.SaveChanges();
  288. var facetResults = s.Advanced.DocumentQuery<Camera>("CameraCost")
  289. .AggregateUsing("facets/CameraFacets")
  290. .Execute();
  291. Assert.Equal(5, facetResults["Manufacturer"].Values.Count());
  292. Assert.Equal("canon", facetResults["Manufacturer"].Values[0].Range);
  293. Assert.Equal("jessops", facetResults["Manufacturer"].Values[1].Range);
  294. Assert.Equal("nikon", facetResults["Manufacturer"].Values[2].Range);
  295. Assert.Equal("phillips", facetResults["Manufacturer"].Values[3].Range);
  296. Assert.Equal("sony", facetResults["Manufacturer"].Values[4].Range);
  297. foreach (var facet in facetResults["Manufacturer"].Values)
  298. {
  299. var inMemoryCount = _data.Where(x => x.Manufacturer.ToLower() == facet.Range).Count();
  300. Assert.Equal(inMemoryCount, facet.Count);
  301. }
  302. Assert.Equal(new List<string>(), facetResults["Manufacturer"].RemainingTerms);
  303. Assert.Equal(0, facetResults["Manufacturer"].RemainingTermsCount);
  304. Assert.Equal(0, facetResults["Manufacturer"].RemainingHits);
  305. Assert.Equal(5, facetResults["Model"].Values.Count());
  306. Assert.Equal("model1", facetResults["Model"].Values[0].Range);
  307. Assert.Equal("model2", facetResults["Model"].Values[1].Range);
  308. Assert.Equal("model3", facetResults["Model"].Values[2].Range);
  309. Assert.Equal("model4", facetResults["Model"].Values[3].Range);
  310. Assert.Equal("model5", facetResults["Model"].Values[4].Range);
  311. foreach (var facet in facetResults["Model"].Values)
  312. {
  313. var inMemoryCount = _data.Where(x => x.Model.ToLower() == facet.Range).Count();
  314. Assert.Equal(inMemoryCount, facet.Count);
  315. }
  316. Assert.Equal(new List<string>(), facetResults["Model"].RemainingTerms);
  317. Assert.Equal(0, facetResults["Model"].RemainingTermsCount);
  318. Assert.Equal(0, facetResults["Model"].RemainingHits);
  319. }
  320. }
  321. }
  322. [Fact]
  323. public void CanPerformFacetedLimitSearch_TermAsc_LuceneQuery()
  324. {
  325. var facets = new List<Facet>
  326. {
  327. new Facet
  328. {
  329. FieldName = "Manufacturer",
  330. Options = new FacetOptions
  331. {
  332. PageSize = 2,
  333. //MaxResults = 2,
  334. IncludeRemainingTerms = true
  335. }
  336. }
  337. };
  338. using (var store = GetDocumentStore())
  339. {
  340. Setup(store);
  341. using (var s = store.OpenSession())
  342. {
  343. s.Store(new FacetSetup { Id = "facets/CameraFacets", Facets = facets });
  344. s.SaveChanges();
  345. var facetResults = s.Advanced.DocumentQuery<Camera>("CameraCost")
  346. .WhereGreaterThan(x => x.DateOfListing, new DateTime(2000, 1, 1))
  347. .Take(2)
  348. .AggregateUsing("facets/CameraFacets")
  349. .Execute();
  350. Assert.Equal(2, facetResults["Manufacturer"].Values.Count());
  351. Assert.Equal("canon", facetResults["Manufacturer"].Values[0].Range);
  352. Assert.Equal("jessops", facetResults["Manufacturer"].Values[1].Range);
  353. foreach (var facet in facetResults["Manufacturer"].Values)
  354. {
  355. var inMemoryCount = _data.Where(x => x.DateOfListing > new DateTime(2000, 1, 1)).Where(x => x.Manufacturer.ToLower() == facet.Range).Count();
  356. Assert.Equal(inMemoryCount, facet.Count);
  357. }
  358. Assert.Equal(3, facetResults["Manufacturer"].RemainingTermsCount);
  359. Assert.Equal(3, facetResults["Manufacturer"].RemainingTerms.Count());
  360. Assert.Equal("nikon", facetResults["Manufacturer"].RemainingTerms[0]);
  361. Assert.Equal("phillips", facetResults["Manufacturer"].RemainingTerms[1]);
  362. Assert.Equal("sony", facetResults["Manufacturer"].RemainingTerms[2]);
  363. Assert.Equal(_data.Count(x => x.DateOfListing > new DateTime(2000, 1, 1)),
  364. facetResults["Manufacturer"].Values[0].Count +
  365. facetResults["Manufacturer"].Values[1].Count +
  366. facetResults["Manufacturer"].RemainingHits);
  367. }
  368. }
  369. }
  370. [Fact]
  371. public void CanPerformFacetedLimitSearch_TermDesc_LuceneQuery()
  372. {
  373. var facets = new List<Facet>
  374. {
  375. new Facet
  376. {
  377. FieldName = "Manufacturer",
  378. Options = new FacetOptions
  379. {
  380. PageSize = 3,
  381. //MaxResults = 3,
  382. TermSortMode = FacetTermSortMode.ValueDesc,
  383. IncludeRemainingTerms = true
  384. }
  385. }
  386. };
  387. using (var store = GetDocumentStore())
  388. {
  389. Setup(store);
  390. using (var s = store.OpenSession())
  391. {
  392. s.Store(new FacetSetup { Id = "facets/CameraFacets", Facets = facets });
  393. s.SaveChanges();
  394. var facetResults = s.Advanced.DocumentQuery<Camera>("CameraCost")
  395. .WhereGreaterThan(x => x.DateOfListing, new DateTime(2000, 1, 1))
  396. .AggregateUsing("facets/CameraFacets")
  397. .Execute();
  398. Assert.Equal(3, facetResults["Manufacturer"].Values.Count());
  399. Assert.Equal("sony", facetResults["Manufacturer"].Values[0].Range);
  400. Assert.Equal("phillips", facetResults["Manufacturer"].Values[1].Range);
  401. Assert.Equal("nikon", facetResults["Manufacturer"].Values[2].Range);
  402. foreach (var facet in facetResults["Manufacturer"].Values)
  403. {
  404. var inMemoryCount = _data.Where(x => x.DateOfListing > new DateTime(2000, 1, 1)).Where(x => x.Manufacturer.ToLower() == facet.Range).Count();
  405. Assert.Equal(inMemoryCount, facet.Count);
  406. }
  407. Assert.Equal(2, facetResults["Manufacturer"].RemainingTermsCount);
  408. Assert.Equal(2, facetResults["Manufacturer"].RemainingTerms.Count());
  409. Assert.Equal("jessops", facetResults["Manufacturer"].RemainingTerms[0]);
  410. Assert.Equal("canon", facetResults["Manufacturer"].RemainingTerms[1]);
  411. Assert.Equal(_data.Count(x => x.DateOfListing > new DateTime(2000, 1, 1)),
  412. facetResults["Manufacturer"].Values[0].Count +
  413. facetResults["Manufacturer"].Values[1].Count +
  414. facetResults["Manufacturer"].Values[2].Count +
  415. facetResults["Manufacturer"].RemainingHits);
  416. }
  417. }
  418. }
  419. [Fact]
  420. public void CanPerformFacetedLimitSearch_HitsAsc_LuceneQuery()
  421. {
  422. var facets = new List<Facet>
  423. {
  424. new Facet
  425. {
  426. FieldName = "Manufacturer",
  427. Options = new FacetOptions
  428. {
  429. PageSize = 2,
  430. //MaxResults = 2,
  431. TermSortMode = FacetTermSortMode.CountAsc,
  432. IncludeRemainingTerms = true
  433. }
  434. }
  435. };
  436. using (var store = GetDocumentStore())
  437. {
  438. Setup(store);
  439. using (var s = store.OpenSession())
  440. {
  441. s.Store(new FacetSetup { Id = "facets/CameraFacets", Facets = facets });
  442. s.SaveChanges();
  443. var facetResults = s.Advanced.DocumentQuery<Camera>("CameraCost")
  444. .AggregateUsing("facets/CameraFacets")
  445. .Execute();
  446. var cameraCounts = from d in _data
  447. group d by d.Manufacturer
  448. into result
  449. select new { Manufacturer = result.Key, Count = result.Count() };
  450. var camerasByHits = cameraCounts.OrderBy(x => x.Count).ThenBy(x => x.Manufacturer)
  451. .Select(x => x.Manufacturer.ToLower()).ToList();
  452. Assert.Equal(2, facetResults["Manufacturer"].Values.Count());
  453. Assert.Equal(camerasByHits[0], facetResults["Manufacturer"].Values[0].Range);
  454. Assert.Equal(camerasByHits[1], facetResults["Manufacturer"].Values[1].Range);
  455. foreach (var facet in facetResults["Manufacturer"].Values)
  456. {
  457. var inMemoryCount = _data.Where(x => x.Manufacturer.ToLower() == facet.Range).Count();
  458. Assert.Equal(inMemoryCount, facet.Count);
  459. }
  460. Assert.Equal(3, facetResults["Manufacturer"].RemainingTermsCount);
  461. Assert.Equal(3, facetResults["Manufacturer"].RemainingTerms.Count());
  462. Assert.Equal(camerasByHits[2], facetResults["Manufacturer"].RemainingTerms[0]);
  463. Assert.Equal(camerasByHits[3], facetResults["Manufacturer"].RemainingTerms[1]);
  464. Assert.Equal(camerasByHits[4], facetResults["Manufacturer"].RemainingTerms[2]);
  465. Assert.Equal(_data.Count(),
  466. facetResults["Manufacturer"].Values[0].Count +
  467. facetResults["Manufacturer"].Values[1].Count +
  468. facetResults["Manufacturer"].RemainingHits);
  469. }
  470. }
  471. }
  472. [Fact]
  473. public void CanPerformFacetedLimitSearch_HitsDesc_LuceneQuery()
  474. {
  475. //also specify more results than we have
  476. var facets = new List<Facet>
  477. {
  478. new Facet
  479. {
  480. FieldName = "Manufacturer",
  481. Options = new FacetOptions
  482. {
  483. PageSize = 20,
  484. //MaxResults = 20,
  485. TermSortMode = FacetTermSortMode.CountDesc,
  486. IncludeRemainingTerms = true
  487. }
  488. }
  489. };
  490. using (var store = GetDocumentStore())
  491. {
  492. Setup(store);
  493. using (var s = store.OpenSession())
  494. {
  495. s.Store(new FacetSetup { Id = "facets/CameraFacets", Facets = facets });
  496. s.SaveChanges();
  497. var facetResults = s.Advanced.DocumentQuery<Camera>("CameraCost")
  498. .AggregateUsing("facets/CameraFacets")
  499. .Execute();
  500. var cameraCounts = from d in _data
  501. group d by d.Manufacturer
  502. into result
  503. select new { Manufacturer = result.Key, Count = result.Count() };
  504. var camerasByHits = cameraCounts.OrderByDescending(x => x.Count).ThenBy(x => x.Manufacturer.ToLower()).Select(x => x.Manufacturer.ToLower()).ToList();
  505. Assert.Equal(5, facetResults["Manufacturer"].Values.Count());
  506. Assert.Equal(camerasByHits[0], facetResults["Manufacturer"].Values[0].Range);
  507. if (camerasByHits[1] != facetResults["Manufacturer"].Values[1].Range)
  508. WaitForUserToContinueTheTest(store, debug: false);
  509. Assert.Equal(camerasByHits[1], facetResults["Manufacturer"].Values[1].Range);
  510. Assert.Equal(camerasByHits[2], facetResults["Manufacturer"].Values[2].Range);
  511. Assert.Equal(camerasByHits[3], facetResults["Manufacturer"].Values[3].Range);
  512. Assert.Equal(camerasByHits[4], facetResults["Manufacturer"].Values[4].Range);
  513. foreach (var facet in facetResults["Manufacturer"].Values)
  514. {
  515. var inMemoryCount = _data.Where(x => x.Manufacturer.ToLower() == facet.Range).Count();
  516. Assert.Equal(inMemoryCount, facet.Count);
  517. }
  518. Assert.Equal(0, facetResults["Manufacturer"].RemainingTermsCount);
  519. Assert.Equal(0, facetResults["Manufacturer"].RemainingTerms.Count());
  520. Assert.Equal(0, facetResults["Manufacturer"].RemainingHits);
  521. }
  522. }
  523. }
  524. private void Setup(IDocumentStore store)
  525. {
  526. using (var s = store.OpenSession())
  527. {
  528. store.Maintenance.Send(new PutIndexesOperation(new[] {
  529. new IndexDefinition
  530. {
  531. Name = "CameraCost",
  532. Maps =
  533. {
  534. @"from camera in docs
  535. select new
  536. {
  537. camera.Manufacturer,
  538. camera.Model,
  539. camera.Cost,
  540. camera.DateOfListing,
  541. camera.Megapixels
  542. }"
  543. }
  544. }
  545. }))
  546. ;
  547. var counter = 0;
  548. foreach (var camera in _data)
  549. {
  550. s.Store(camera);
  551. counter++;
  552. if (counter % (NumCameras / 25) == 0)
  553. s.SaveChanges();
  554. }
  555. s.SaveChanges();
  556. WaitForIndexing(store);
  557. }
  558. }
  559. }
  560. }