/test/SlowTests/SlowTests/Faceted/FacetPaging.cs

https://github.com/fitzchak/ravendb · C# · 731 lines · 606 code · 102 blank · 23 comment · 14 complexity · a7d907f18806c872a3e0be994db37a0d MD5 · raw file

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