懒得勤快 %!s(int64=6) %!d(string=hai) anos
achega
1e3630c9cb
Modificáronse 42 ficheiros con 4623 adicións e 0 borrados
  1. 10 0
      Masuit.LuceneEFCore.SearchEngine.Test/Helpers/MockContext.cs
  2. 10 0
      Masuit.LuceneEFCore.SearchEngine.Test/Helpers/MockNonIndexableContext.cs
  3. 1001 0
      Masuit.LuceneEFCore.SearchEngine.Test/Helpers/TestData/MOCK_CITIES.csv
  4. 1001 0
      Masuit.LuceneEFCore.SearchEngine.Test/Helpers/TestData/MOCK_USERS.csv
  5. 85 0
      Masuit.LuceneEFCore.SearchEngine.Test/Helpers/TestDataGenerator.cs
  6. 66 0
      Masuit.LuceneEFCore.SearchEngine.Test/Helpers/TestDbContext.cs
  7. 131 0
      Masuit.LuceneEFCore.SearchEngine.Test/LuceneIndexSearcherTests.cs
  8. 146 0
      Masuit.LuceneEFCore.SearchEngine.Test/LuceneIndexerTests.cs
  9. 86 0
      Masuit.LuceneEFCore.SearchEngine.Test/LuceneSearchOptionsTests.cs
  10. 29 0
      Masuit.LuceneEFCore.SearchEngine.Test/Masuit.LuceneEFCore.SearchEngine.Test.csproj
  11. 14 0
      Masuit.LuceneEFCore.SearchEngine.Test/Models/City.cs
  12. 8 0
      Masuit.LuceneEFCore.SearchEngine.Test/Models/NonIndexable.cs
  13. 18 0
      Masuit.LuceneEFCore.SearchEngine.Test/Models/User.cs
  14. 299 0
      Masuit.LuceneEFCore.SearchEngine.Test/SearchContextTests.cs
  15. 37 0
      Masuit.LuceneEFCore.SearchEngine.sln
  16. 83 0
      Masuit.LuceneEFCore.SearchEngine/Helpers/DocumentExtension.cs
  17. 66 0
      Masuit.LuceneEFCore.SearchEngine/Helpers/StringHelpers.cs
  18. 32 0
      Masuit.LuceneEFCore.SearchEngine/Interfaces/ILuceneIndexSearcher.cs
  19. 26 0
      Masuit.LuceneEFCore.SearchEngine/Interfaces/ILuceneIndexable.cs
  20. 56 0
      Masuit.LuceneEFCore.SearchEngine/Interfaces/ILuceneIndexer.cs
  21. 20 0
      Masuit.LuceneEFCore.SearchEngine/Interfaces/ILuceneSearchResult.cs
  22. 25 0
      Masuit.LuceneEFCore.SearchEngine/Interfaces/ILuceneSearchResultCollection.cs
  23. 19 0
      Masuit.LuceneEFCore.SearchEngine/Interfaces/IScoredSearchResult.cs
  24. 26 0
      Masuit.LuceneEFCore.SearchEngine/Interfaces/IScoredSearchResultCollection.cs
  25. 70 0
      Masuit.LuceneEFCore.SearchEngine/Interfaces/ISearchContextProvider.cs
  26. 26 0
      Masuit.LuceneEFCore.SearchEngine/Interfaces/ISearchResultCollection.cs
  27. 41 0
      Masuit.LuceneEFCore.SearchEngine/LuceneIndexChange.cs
  28. 66 0
      Masuit.LuceneEFCore.SearchEngine/LuceneIndexChangeset.cs
  29. 204 0
      Masuit.LuceneEFCore.SearchEngine/LuceneIndexSearcher.cs
  30. 33 0
      Masuit.LuceneEFCore.SearchEngine/LuceneIndexState.cs
  31. 39 0
      Masuit.LuceneEFCore.SearchEngine/LuceneIndexableAttribute.cs
  32. 62 0
      Masuit.LuceneEFCore.SearchEngine/LuceneIndexableBaseEntity.cs
  33. 172 0
      Masuit.LuceneEFCore.SearchEngine/LuceneIndexer.cs
  34. 23 0
      Masuit.LuceneEFCore.SearchEngine/LuceneIndexerOptions.cs
  35. 21 0
      Masuit.LuceneEFCore.SearchEngine/LuceneSearchResult.cs
  36. 26 0
      Masuit.LuceneEFCore.SearchEngine/LuceneSearchResultCollection.cs
  37. 15 0
      Masuit.LuceneEFCore.SearchEngine/Masuit.LuceneEFCore.SearchEngine.csproj
  38. 21 0
      Masuit.LuceneEFCore.SearchEngine/ScoredSearchResult.cs
  39. 27 0
      Masuit.LuceneEFCore.SearchEngine/ScoredSearchResultCollection.cs
  40. 302 0
      Masuit.LuceneEFCore.SearchEngine/SearchContextProvider.cs
  41. 149 0
      Masuit.LuceneEFCore.SearchEngine/SearchOptions.cs
  42. 32 0
      Masuit.LuceneEFCore.SearchEngine/SearchResultCollection.cs

+ 10 - 0
Masuit.LuceneEFCore.SearchEngine.Test/Helpers/MockContext.cs

@@ -0,0 +1,10 @@
+using Masuit.LuceneEFCore.SearchEngine.Test.Models;
+using Microsoft.EntityFrameworkCore;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Test.Helpers
+{
+    public class MockContext : DbContext
+    {
+        public virtual DbSet<User> Users { get; set; }
+    }
+}

+ 10 - 0
Masuit.LuceneEFCore.SearchEngine.Test/Helpers/MockNonIndexableContext.cs

@@ -0,0 +1,10 @@
+using Masuit.LuceneEFCore.SearchEngine.Test.Models;
+using Microsoft.EntityFrameworkCore;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Test.Helpers
+{
+    public class MockNonIndexableContext : DbContext
+    {
+        public virtual DbSet<NonIndexable> NonIndexables { get; set; }
+    }
+}

+ 1001 - 0
Masuit.LuceneEFCore.SearchEngine.Test/Helpers/TestData/MOCK_CITIES.csv

@@ -0,0 +1,1001 @@
+id,Country,CountryCode,City,IndexId
+1,Indonesia,ID,Palebunan,59cc0738-96a5-41db-b097-90940728c6c2
+2,Brazil,BR,Pelotas,d332064c-84e0-432b-98ac-b71b1cbe68b5
+3,China,CN,Daixi,90e53b3d-07a4-41a8-9330-41689c9f5f64
+4,Peru,PE,Yauca,f2e229ee-3f5c-4f85-976a-2fa64d7feede
+5,Russia,RU,Slobodka,36284f0b-775e-4ee1-81d1-73fd2011e8a4
+6,Brazil,BR,Indaial,f6d65219-6ce9-4e80-8cb4-3c3f3ac6c1d3
+7,Sweden,SE,Stockholm,3441acd5-49ac-4d99-b181-7671f1a7f007
+8,United States,US,Miami,c6f1248b-dd35-4057-a99e-3565d256ea83
+9,Russia,RU,Konstantinovskoye,67a5e681-3f56-4ee9-9936-dd476a91cf22
+10,Portugal,PT,Vila Maior,9c750b2b-4e20-49e1-ab2c-251a181c0e8f
+11,Russia,RU,Opechenskiy Posad,35c60cdd-c8b0-4c18-a114-b27a2063edc5
+12,Colombia,CO,El Retén,08a331a9-a661-46b2-8c3d-2e98c9ba8d05
+13,China,CN,Pingba,007eb182-706c-43aa-bd3f-7cf924743474
+14,Indonesia,ID,Puan Selatan,1774b1d8-5639-4c3c-bd7d-4738f03d9c5a
+15,China,CN,Shiziling,dbddd306-8874-4eee-9043-50b35c4599ce
+16,Brazil,BR,Marau,5d3c41d2-2963-4467-8c7f-eb439eaa32fd
+17,Portugal,PT,Carvalhal,685e315f-1fca-4bcb-8055-cc41e9edab08
+18,Indonesia,ID,Pasirreungit,3de01489-8b2e-4915-a939-57bfae18f354
+19,Palestinian Territory,PS,Faḩmah,19f8b804-fbce-45e7-80da-ebadc7f89dc2
+20,Netherlands,NL,Utrecht (stad),2799fd2c-4dac-46c4-9ead-3ff7fadc2200
+21,Poland,PL,Przybyszówka,3826067a-3b35-43c9-9344-5e32ce4175d6
+22,China,CN,Cunliji,24e3cf0b-9a85-4783-a364-0066c883fa66
+23,China,CN,Puyuan,b37e6007-384b-4a92-8696-37caf18c276f
+24,China,CN,Dainan,0acdc10d-4e56-43e2-959d-7e08a0aad209
+25,China,CN,Qiaoshi,67085793-1044-497c-9ae0-b81e2e58ad08
+26,China,CN,Chunjing,03508055-6409-483b-8908-46838fdd30d3
+27,China,CN,Changsha,72d7f939-b103-4057-a013-6e7cda06273d
+28,Costa Rica,CR,San Rafael,9fc855cc-a8ad-4d6c-bd49-f1fafe961883
+29,Bosnia and Herzegovina,BA,Gostovići,b8519037-1d5d-4754-b455-aa85fd84ab42
+30,Indonesia,ID,Curahklapa,8dbed099-2f1c-4681-8b7d-8b27b52fd2dc
+31,Indonesia,ID,Long Loreh,925a8476-66ab-4f85-b467-0921cee8980c
+32,Madagascar,MG,Fianarantsoa,d4117f83-2f5d-441a-90a8-96de7d9f8a17
+33,Vietnam,VN,Hòa Bình,0b1ea9db-34fa-4208-af19-23a2eefc78b8
+34,Sweden,SE,Uppsala,8c53682e-e5c9-40cc-ba77-5e362691a4a3
+35,Canada,CA,Edson,1d787b8c-9457-442f-a27e-ffb7cff93e93
+36,Sweden,SE,Gimo,6d847530-964f-488b-b269-648d518951b0
+37,Colombia,CO,Barrancas,789eb436-5028-49a3-a3c6-2ae7497addea
+38,Russia,RU,Polazna,12fc874c-b131-4c60-9c3d-e031061702e1
+39,Panama,PA,Changuinola,42887cf3-3022-48d9-9058-1da64280210a
+40,Uruguay,UY,Santa Bernardina,09018a57-47a6-4f82-b054-ebc7fc8359de
+41,France,FR,Paris 02,a08789ff-b0ff-41be-bd1b-02e791560df0
+42,Canada,CA,Agassiz,18e1f172-fec8-4309-9ca4-4a5112c68281
+43,Philippines,PH,San Jose,f3f46824-dcb8-4f74-8aad-6b5056088904
+44,Brazil,BR,Pederneiras,b915e337-9be2-41c7-b223-46e59801babd
+45,Poland,PL,Piła,5be2ea93-ebb3-4dac-a006-d7ff280e479a
+46,Mexico,MX,Benito Juarez,448d3255-5ba3-439f-9809-8f40cccf5d64
+47,Poland,PL,Siemiątkowo,23c24495-71d1-493f-b65a-0b43c15cf098
+48,Poland,PL,Gubin,fd06e7a1-61d4-4893-a1bd-70c2b87c27ae
+49,Switzerland,CH,Basel,2615caa7-a04c-4c33-883f-37262e68285d
+50,United States,US,Cumming,0af2579d-1d5e-4c5f-8bfc-60148f1699fa
+51,Indonesia,ID,Sidonganti,c7ee128f-a62b-432b-a193-44393a027140
+52,Norway,NO,Oslo,255a74fa-dae5-4c49-a4a1-4d813a253fec
+53,Indonesia,ID,Sinarbakti,4f70f1d1-0117-4f28-93f2-879c3e69c584
+54,Russia,RU,Mirskoy,b2b309ec-7d8a-4bf1-a297-f3155c004ad4
+55,Vietnam,VN,Thị Trấn Mộc Châu,67b6823b-b037-4101-b84c-63da9289c00e
+56,Mongolia,MN,Dzuunmod,4cd6e58b-ac16-4a71-aa8e-deae8b23bcb9
+57,Russia,RU,Tosno,68c0edca-6710-4168-beee-4fc56b79d129
+58,Micronesia,FM,Nukuoro,273d42ef-f0a0-44b8-96f8-78eb459f3f13
+59,Poland,PL,Koszarawa,d4add32f-bc58-4d49-be0a-df492cc99d3c
+60,Ukraine,UA,Pryazovs’ke,ecee4b6c-7289-4692-a14c-f2e48cd420ff
+61,Israel,IL,Yavne,70153fa0-20ca-44ac-a2ed-80509534eb51
+62,Ukraine,UA,Fastiv,2900462f-08f7-4b61-a1a0-0e9e6a3211a0
+63,Canada,CA,Watrous,b9a2eab3-4436-4063-b087-29f17341b992
+64,Ukraine,UA,Richky,eddeffc2-d6fd-4ccd-94ed-bdb700ea911c
+65,Thailand,TH,Kamalasai,46942361-8c1f-43f8-bb90-46325d11ed31
+66,Mexico,MX,Benito Juarez,212d6ca9-0f51-4864-983e-b72232d4b3a2
+67,Philippines,PH,Sinacaban,bffbe3a3-b44d-4e04-9b83-a0341f54cb22
+68,Mongolia,MN,Buga,5d051aa2-f878-41e7-8c35-cdc0365f32c0
+69,Cameroon,CM,Bafoussam,5137bc39-3f61-445c-abb2-d3a8b024c6d7
+70,China,CN,Xinzhaiping,bfb475bb-e2e0-4d43-b5e2-6ba50bb1fe25
+71,Colombia,CO,Barrancas,ece2f7e0-9c9d-4d8f-9b53-a2a4379e4744
+72,Ukraine,UA,Apostolove,5b35187a-477d-46f5-bfe7-568218756443
+73,Poland,PL,Sokołów Podlaski,43d5d602-c49a-4b8d-b082-26d5e7cd2017
+74,China,CN,Yangzhuang,e5c1eae0-51ee-4c4f-8656-11bec5834b28
+75,China,CN,Lukou,20af42d8-1e66-4128-9760-6356efb15876
+76,Japan,JP,Hagi,5d2e93d4-031b-4a83-912e-5d04b792f3b5
+77,China,CN,Luzhang,d1a1438a-f591-40d1-bd22-56548e1d457e
+78,China,CN,Xinshan,f2bbd8f4-ccea-4d2b-ab90-1c4cb9c7dfc0
+79,Portugal,PT,Moscavide,eafe8d4d-d859-4d6d-a122-19d4082552f9
+80,Japan,JP,Yokotemachi,3c7d5543-295f-481a-8353-07bcf10b2639
+81,Russia,RU,Staropavlovskaya,f9a1984c-014b-4c19-ad7c-b51608a4f5f0
+82,Honduras,HN,Santa Lucía,d16c028c-c7bd-43d6-ad7b-286718a4ae2c
+83,China,CN,Zhongcheng,8c0064dd-57fe-4a63-83af-23b913ec09c8
+84,Indonesia,ID,Mangkon Daja,7e18be49-ff9b-41c5-b076-c395a640bd35
+85,Indonesia,ID,Serang,ee61fe4c-b926-4275-9a8f-0c03f951ac66
+86,Portugal,PT,Póvoa,c108b48a-aacf-4e4d-9f46-624cd52c5569
+87,Venezuela,VE,Santa Bárbara,b61f0afe-12a3-4a83-b51f-92136a09a58b
+88,Philippines,PH,Sabang,861f928d-1096-42c3-a025-5304649bfd3b
+89,Dominican Republic,DO,Bella Vista,45844a9b-9a83-4126-889d-770ae7788d84
+90,Philippines,PH,Looc,c25524f2-fab3-45a8-b8a8-1cbd14655bbb
+91,Poland,PL,Ruda Śląska,ea1616b8-bcf1-4006-9357-671a0563823f
+92,Indonesia,ID,Ngembak,fb16dbdf-afd8-4ef3-b8b0-e2b391080810
+93,Albania,AL,Voskop,59d29b2e-bcfd-49c5-beef-72e1457d1ead
+94,Philippines,PH,La Fortuna,2b7449f8-6d26-49fa-ad41-109d4fe4c95f
+95,New Zealand,NZ,Methven,41ed946d-5c1f-4b39-94e4-ac041ca161bb
+96,China,CN,Dancheng,8105af89-8ff8-4bb3-9ee8-fc64b37a1919
+97,Brazil,BR,Alfenas,ccff9389-5151-4703-a712-5bfdef5e8c94
+98,China,CN,Wucheng,9f664149-e4ef-4c1a-832b-61717552f6e9
+99,Nigeria,NG,Offa,5c3d696f-2a49-40f9-9112-f70b9258ffc1
+100,Myanmar,MM,Taungoo,f73c52ac-c800-4dff-811a-5bf3a3c6c924
+101,Philippines,PH,Talipan,5b4a1320-d113-49a4-a549-23a95a09c6c0
+102,Germany,DE,Wetzlar,527f8870-991a-4db3-8036-5a181ae9b5b8
+103,Portugal,PT,Valeirinha,83f398c2-024f-40cb-a60c-e04572529a9b
+104,China,CN,Hekou,66f0d05f-cdcc-402c-9096-f605403a6d67
+105,Canada,CA,Collingwood,b68f1021-d39d-4966-a355-deb6aa31ef55
+106,Afghanistan,AF,Nīkêh,0585c0e3-ba60-4997-8521-c121d9cd7701
+107,Colombia,CO,Turbaco,82259a16-2d53-4c31-a66a-5c9a07c0a0a7
+108,Indonesia,ID,Poteran,64744654-28ab-40fd-a2bb-ed99fcd72ccd
+109,Pakistan,PK,Hujra,cb554594-a9cc-4f69-9ee0-ba554b975a8a
+110,United States,US,Evansville,e48b7db7-1e9e-4260-9396-0b53c157aae3
+111,Portugal,PT,Outeiro de Polima,0a039402-7abf-4f05-ae65-c19054ceb4d3
+112,Japan,JP,Onomichi,1694bb7b-6f49-4eb0-ac74-db99c68bec3c
+113,Japan,JP,Mizusawa,0d5aac75-a80e-4427-97a8-031751586930
+114,Comoros,KM,Oussivo,0ad80bee-5da5-47a3-ae50-9336de4cb2cf
+115,Peru,PE,Jeberos,b6c64318-4655-4d32-b2b0-f19a4da46517
+116,Poland,PL,Nowy Sącz,7b26dfd2-b086-461c-8621-08af8e0058f7
+117,Thailand,TH,Khong Chai,90a9ab06-1784-430c-9b50-8a50715fd217
+118,Indonesia,ID,Purut,96343828-e699-442c-93a2-06a992b7abba
+119,China,CN,Sanhe,9a379482-d3fa-4b5a-a509-7359d142bcd8
+120,China,CN,Fenjie,c50e5bf8-afcf-483c-a411-74801f400eea
+121,Pakistan,PK,Lāliān,acd4253a-b2e2-448c-a6c2-6f8b2fc74365
+122,Uzbekistan,UZ,Koson Shahri,6fd363cf-abab-49cb-9eeb-9ebcebb892c9
+123,China,CN,Changting,28e946d9-3b50-4f7b-bc3b-8d11c2ecacd6
+124,Finland,FI,Kauniainen,9cd4905a-6fd1-4220-aa6e-0bdfed682d7b
+125,Norway,NO,Oslo,9589eab1-ff46-4565-9ab1-e2a526eec037
+126,China,CN,Tailing,f093a4d5-a87b-4813-9312-75dfed0ed25c
+127,China,CN,Baisha,014c8ae3-afc6-40cc-99d8-87aaeac6387c
+128,Colombia,CO,Aguadas,33bdf308-696e-4920-84fb-f2e6b35440ad
+129,China,CN,Huangdimiao,6566d6de-0279-41d3-9417-194633f890b0
+130,China,CN,Huangtang,dd567087-f332-4313-8aa6-f592409ebf28
+131,China,CN,Wanquan,08a61bc0-3c64-4e6e-98ae-77c2af52864b
+132,China,CN,Chengyue,4da61eea-7da3-408d-af12-2999caa95fc1
+133,Canada,CA,Claresholm,673559a0-a258-4ea8-a6d5-ccd2927ee2cb
+134,Poland,PL,Lipiany,f0f18825-8bd1-450e-b66d-4d3d37e7426a
+135,Philippines,PH,Cantapoy,4f567728-7f01-494f-b55e-5c1a422a7738
+136,Philippines,PH,Santa Ana,66b53744-c636-46b9-84ee-ea57bbffbfdb
+137,Sweden,SE,Södertälje,b4e054ef-6825-41a0-9f8f-f1821fdc3311
+138,Italy,IT,Roma,a13ff7d2-8d20-4c06-b490-a145fb6347bc
+139,Kazakhstan,KZ,Zhambyl,056da862-bcb9-4f5d-9c1a-9479fd6d96f6
+140,Poland,PL,Pokój,4f560a96-a134-43f3-81e3-a91cd0b62927
+141,Greece,GR,Níkaia,c5309b07-4c21-4d1d-ab66-b940f057c532
+142,United Kingdom,GB,Ford,a60842ad-030f-4ac2-a7b5-cd0fee4ac5aa
+143,Mauritius,MU,Mapou,d386350e-6bb7-48d8-88c4-7e651fc220ff
+144,Philippines,PH,Cantapoy,94441e7c-d5ca-4932-a86f-f2d1bf5157ab
+145,Venezuela,VE,El Pao,6801ca71-c2b6-4a17-ad8c-f5aa53694caf
+146,Philippines,PH,Vigan,baa6802f-a39a-4195-a773-80b25318d5f7
+147,Malaysia,MY,Kuching,ae66b8d0-3705-4ac7-91ae-f6d6962ccab1
+148,Canada,CA,Kamloops,b17cf6e6-6943-4752-95a6-b163004f36dc
+149,Uruguay,UY,Dolores,a02ea78b-16a8-4b55-a1aa-996d307f7b57
+150,Russia,RU,Razumnoye,bbb09bff-1728-4fc5-b6ab-04614cdcd96b
+151,Poland,PL,Pogórze,046e089a-f96d-4a66-9463-bd4bc120c18d
+152,Indonesia,ID,Pasuruan,7f844761-9294-48fd-8317-3f0889024ffb
+153,Australia,AU,Eastern Suburbs Mc,de1e97e5-a0a4-4541-ad66-114e019bdb0a
+154,Philippines,PH,Patria,52a6c005-3e8b-49d4-a18f-81299ba09af3
+155,Indonesia,ID,Bator,3bf2dc9a-a2e8-4c93-8818-bd12ad4aa0c9
+156,Greece,GR,Maroúsi,26092e99-b649-4537-afbe-43a5fce07881
+157,Tajikistan,TJ,Qŭrghonteppa,5c90f8a8-732a-43a0-ac1e-e8baeff9ccfa
+158,France,FR,Lyon,cd87cf80-f3ef-45f7-bbaf-109b7b6b648b
+159,Ukraine,UA,Dmytrivka,68fecd43-a5a3-4b46-bbc7-41d8e4159e1b
+160,Ireland,IE,Oughterard,d60a5282-ab63-4d1c-845e-73c03716c552
+161,China,CN,Huangjia,9224b1f9-3e9c-4c65-8342-176b331ba74d
+162,China,CN,Xiapu,35bd3db4-cca6-4a28-90cc-e81ed7be039b
+163,Peru,PE,Chincha Baja,8ccdd6b7-f505-48e5-965b-ae8d08b85bc0
+164,Italy,IT,Genova,82fa55fa-634c-4d18-a925-48f168b2fd53
+165,Brazil,BR,Araucária,3184626c-5dc3-4bc0-8857-c243af2524f3
+166,Canada,CA,Oak Bay,d5fcc99a-82ae-4af2-abc3-0e496e0b9f62
+167,Russia,RU,Vykhino-Zhulebino,23865904-f1c0-4d22-9db5-b55052a42ad2
+168,Peru,PE,Sausa,af14dd95-2b01-450a-8591-b4c0ef25a5cc
+169,Finland,FI,Ilmajoki,1caab11c-479a-4bd0-8b1d-71a6b329ea57
+170,Brazil,BR,Piracuruca,1cadcdde-fb1f-4c00-b7ef-137836db6e89
+171,Ireland,IE,Greenhills,d46323fd-683d-4b83-94a6-a17285a22896
+172,Indonesia,ID,Jatisari,6932335a-b008-49c6-af59-66f0ffeffc6d
+173,Portugal,PT,Rosmaninhal,f60ee89f-949a-454f-b9a5-fc0acda4ff75
+174,Russia,RU,Dubna,df197402-f227-4151-a9a2-61fbe1c2c158
+175,China,CN,Dachuan,2a1a78f2-1067-40e7-97d5-b1a7bbb7b871
+176,China,CN,Yutan,d0a17251-bb17-45b7-bdaf-f1a2410ad1a4
+177,Czech Republic,CZ,Frýdlant,c9ef8efb-b9af-4bd7-b36c-27216424179e
+178,Serbia,RS,Senta,e5b4bdbf-d917-432a-bfe9-7f49d9e8a1e5
+179,Philippines,PH,Mangusu,285c7bb1-4534-458d-895f-eb2d2e2fc08c
+180,Micronesia,FM,Ettal,cba626c8-6f58-4b0d-8b58-c23e5a077a23
+181,Kyrgyzstan,KG,Chayek,6abbb730-27e4-445f-bfb9-fc02576d866e
+182,Sweden,SE,Rättvik,69c34136-ddb9-4b94-9975-a5fff5af9ed8
+183,Bangladesh,BD,Teknāf,7dcd5028-ab3d-4926-afd6-5bb6efb2afb4
+184,Pakistan,PK,Vihāri,6e7319ef-2cdb-42b2-a4a0-4df7d0029c49
+185,United States,US,Evansville,e1bcfc6f-af7a-41db-a1f8-33755029a259
+186,Canada,CA,Niagara Falls,c5226320-15c9-41c9-93b9-62aab7ae6f06
+187,Indonesia,ID,Pasatan,6bb37134-168f-4dc9-ae12-aa59e27b8de0
+188,China,CN,Kuantian,7b47a977-71c6-4ab4-9ce7-b47d830cd522
+189,Poland,PL,Wasilków,d8a8d4b9-7d36-4503-be8f-64c5813b95a0
+190,France,FR,Carcassonne,1668b9a6-3b78-48e4-93d4-173f485a001c
+191,Brazil,BR,Sinop,4c8058e4-ac6f-4e7f-b7dc-5c67c9a65354
+192,Canada,CA,Watrous,2959bf05-9e64-4518-bfb5-ad268fc600b3
+193,China,CN,Bashan,f6273707-0013-4092-a5bc-9d3275ace0e3
+194,Libya,LY,Brak,fe4dcc17-64a3-4cff-b1a2-2368ff842d06
+195,Canada,CA,Picton,e3f8dcd0-60b3-45f2-973e-07dc12730f93
+196,Malaysia,MY,Nusajaya,52e4118e-cff8-491d-b233-545df9601a4a
+197,Mexico,MX,Francisco I Madero,dc6a4998-e1bc-4bff-b5a6-12c5db96b0dc
+198,China,CN,Guxi,66255444-88b5-4db7-8c9f-29108b1eee39
+199,Latvia,LV,Jūrmala,3906033c-eabe-49b2-8206-38a6e0ce6c4a
+200,South Africa,ZA,Creighton,fb5ec86a-f136-4571-a092-047f86b7daee
+201,Albania,AL,Zall-Dardhë,332df75f-3725-4652-bb63-53e962a88bff
+202,China,CN,Samdo,490b9563-4850-404f-8563-2eaa659b13b2
+203,China,CN,Beigang,4e9368ec-46e0-4788-a451-91c1ee9d9d59
+204,Indonesia,ID,Cikomara,c56787df-e0fd-476e-b632-4143556a8c59
+205,Mexico,MX,San Jose,2cc6962b-b9cf-467d-8929-03d1b0801206
+206,China,CN,Xialiao,20808829-200c-4ac6-bd04-8bcf7e544268
+207,China,CN,Nanzhihui,f608f2e7-e8e5-473f-9405-fa5973ceef2f
+208,Japan,JP,Hirosaki,a6a83fb4-4bf9-449c-8eb5-d49221511877
+209,Russia,RU,Nachalovo,ad06cf20-f208-4f85-9e3c-efa2b68705d9
+210,Peru,PE,Sorochuco,0569d277-7c35-4e4a-ad3d-cd651d48948d
+211,China,CN,Chegang,a9c39a29-7f32-4bbe-85cb-55351838b5f0
+212,China,CN,Shuiyang,3a7d7d54-849f-4be2-9202-f8e09a0ca909
+213,Portugal,PT,Capela,d8ababfa-6d5b-472f-acc3-6a5a403b3761
+214,China,CN,Yonglong,039a8581-c7db-4d2d-91c5-c793dc5e112d
+215,China,CN,Yingmaili,c5451f45-b0c9-44e4-b20b-a66579145c49
+216,Iran,IR,Bandar-e Torkaman,5f816394-ebd2-496b-bf39-e60d3c67d9ce
+217,Ukraine,UA,Verblyany,19a435a5-1e4d-4281-9c63-36eed00befda
+218,Japan,JP,Narutō,b6245652-8b06-4934-8ff7-c6b7bb87d3bc
+219,China,CN,Shuiyuan,6939cec5-1fca-4644-a01c-679de42d5d9a
+220,China,CN,Shijia,334ffbb3-b3cc-4ddb-bc8a-e7a9a2e77f5b
+221,Uzbekistan,UZ,Toshbuloq,b9319d98-bf69-4ba8-a367-45f4df12121b
+222,Philippines,PH,Tigbaw,067f2e3e-756f-4499-826e-6c979c71682a
+223,Mongolia,MN,Rashaant,4b51bd8f-a281-4319-86b6-3aec37489dc1
+224,China,CN,Lengji,87077eab-9004-4858-88d6-fc310eb0e88c
+225,Poland,PL,Wielichowo,afe786b3-6556-46f5-bec4-f8d5cadec928
+226,Mexico,MX,Emiliano Zapata,2e499b4a-8327-4366-90e9-0d2d27bb83ac
+227,Philippines,PH,Ogod,da064aba-7bf2-479a-8ad6-18a5484a6ae2
+228,China,CN,Wantan,2e223883-9cc2-44a9-bdcf-3207813d9736
+229,Russia,RU,Volzhskiy,cbd7ee54-d9fa-4da8-8cc0-abc91e99c6e3
+230,Venezuela,VE,Caramuca,6066bd23-8c44-455c-98ff-f95ca7ce1a05
+231,France,FR,Brétigny-sur-Orge,5bc5b1cc-9697-4bed-a42b-ae90ebd4adb9
+232,Indonesia,ID,Selorejo,6998d846-8550-47e8-ac2b-530eca65ea4c
+233,China,CN,Shentong,fb3ae04b-7288-47e5-bd43-06a6177086cc
+234,Indonesia,ID,Legok,53585f4d-aa24-43d4-a155-cada73447608
+235,Colombia,CO,El Tambo,2be54d0b-5bc8-4abf-a035-804d2921ff8f
+236,Albania,AL,Shkodër,d243cd3a-9c24-4b2f-a91b-1e8285f9fca8
+237,China,CN,Chuanxi,7a45794d-985e-4ece-a0b3-b65d1251db6d
+238,Brazil,BR,Canela,5630f3a1-9359-406c-afa3-9d036250b6c6
+239,Russia,RU,Orsha,bae30eac-38be-4a08-8b3f-efafdb4b2a0a
+240,Sweden,SE,Arboga,9057af1d-988d-4237-bbc7-6e1168ec95c5
+241,Mexico,MX,Obrera,47cff0f2-faff-423c-81b9-4ab4194c2bba
+242,Cuba,CU,Consolación del Sur,70727c76-a027-4d03-af0c-e74d68b56680
+243,Italy,IT,Padova,b047feb8-5c51-4800-bf53-9d07489ad5bb
+244,France,FR,Saint-Brieuc,c8360af1-a75f-4e47-92e4-09e1ad6deab4
+245,Kyrgyzstan,KG,Talas,668988a1-fa56-426d-b5a7-ecc1931810d0
+246,Jordan,JO,As Salţ,10891dd2-9088-4e51-a723-5a8b83416a26
+247,Philippines,PH,Santa Monica,41c3d1c2-dbae-416e-83d1-93058fa1ce11
+248,Belarus,BY,Veyno,3ba4e9b8-0ecd-4a80-8887-fd79730c1259
+249,Mexico,MX,Buenos Aires,0584cff9-4d03-4507-b324-ce1193c7227c
+250,Netherlands,NL,Bergen op Zoom,8325bf6b-004d-4265-bd16-993e13c4d88c
+251,China,CN,Jiaocheng,eeca861e-61ca-4465-a4ca-e541be218ff2
+252,Russia,RU,Ishkhoy-Yurt,c8dc7feb-8b2d-4967-aeed-f27efeca405e
+253,Indonesia,ID,Sarkanjut,965e2444-ce69-4493-8dc6-6baf880b17e2
+254,Thailand,TH,Raman,30699c8c-bac5-417b-97b5-bc3a17ce74af
+255,Czech Republic,CZ,Horní Čermná,f0a5fb8e-b77a-4b9d-bfb1-2d009779358c
+256,Canada,CA,Campbellton,0d8b6768-172f-40be-b378-180a53ae04d0
+257,France,FR,Valence,3734759d-7dc1-4f09-9698-132d726e8900
+258,Poland,PL,Zielona Góra,ef110759-1000-4f8c-ac55-9d290a64db61
+259,China,CN,Sanquan,2c61437e-078d-45f1-8f30-b09917f5fe73
+260,Indonesia,ID,Campraksanta,35262c97-1518-43d4-acf4-c6282443b8b8
+261,China,CN,Muzhou,13e909e2-b33b-4013-be92-c03fb47e0005
+262,Indonesia,ID,Ciparay,2184ee18-dcbc-43ef-9bc8-fb9924a4a48c
+263,Morocco,MA,Jerada,b6a9ee54-f7bd-47de-b621-517a8cf2c1e8
+264,Qatar,QA,Ar Ru’ays,568ae0f6-d863-4fa2-9ffb-c105363a1a00
+265,Indonesia,ID,Uwa,814cd61b-f2ce-4c79-b53d-2ec255a48ef2
+266,Indonesia,ID,Selaawi,ad678e75-57c0-4b44-baee-8475885d17f6
+267,Portugal,PT,Várzea da Serra,23d1e854-442b-49da-a287-2af81e034c64
+268,France,FR,Gif-sur-Yvette,92b2a3c6-315f-4cf2-8ddd-3f7003973152
+269,Paraguay,PY,Unión,446d73aa-9037-4308-982e-15cd531a92bb
+270,Sweden,SE,Skellefteå,7bbbe6de-2ad1-401b-a8bf-85947942ecdc
+271,Russia,RU,Kayasula,13a32a83-d2d6-4ebd-b27c-274c43bacceb
+272,China,CN,Chengxi,14016580-41a2-40a1-8e02-ec16f2f4b71c
+273,Russia,RU,Gorodishche,43e5c4ca-3c89-4b8a-adc6-124a8f2bd1b9
+274,Ivory Coast,CI,Ferkessédougou,7b59a038-8b90-47cf-a148-9d3b4e20141d
+275,Serbia,RS,Jazovo,772b59bd-1ab7-409d-b0a5-f01a77a04d59
+276,Comoros,KM,Moya,a68c3fbf-97c0-4d4e-b932-a32abfd9ec1b
+277,Russia,RU,Svirsk,5de42873-66cc-4fd9-a8e0-97bf7169bb45
+278,Syria,SY,Khān Shaykhūn,eeda56fa-5f49-474d-910f-9bdec89848c8
+279,Argentina,AR,Ciervo Petiso,8d63890c-db70-45a8-84d2-e36af0194eeb
+280,Thailand,TH,Ban Na San,720c3aac-a4da-4bee-86a3-a67c78c648b4
+281,Indonesia,ID,Puteran Kidul,bdb167d1-17f7-4879-b3d3-2083cc0e14bf
+282,China,CN,Nangang,0a7a21aa-0c92-40f9-840e-f09c332ca249
+283,China,CN,Hongshanzui,1cfe3308-afe4-4c71-a292-8b5686192619
+284,United Kingdom,GB,Newton,5309299c-fd43-4b47-85ab-a6ea6aca7e2e
+285,China,CN,Fangtai,3da41ff8-3c33-4c8b-8c18-be3e1049feb0
+286,Portugal,PT,Vista Alegre,978da8d0-f985-41c0-83d3-73d0243d5afc
+287,China,CN,Yicheng,4f630c2b-0c2f-4c8a-b4ca-d12706eea41f
+288,Czech Republic,CZ,Rájec-Jestřebí,aa9a1c30-c1c6-41d9-954e-9bd54a4db864
+289,Norway,NO,Hamar,4df7d7d8-6dd1-4bd5-81d9-d0dc77bc6339
+290,Brazil,BR,Fernandópolis,b1f346d1-196d-4150-b6ae-be3e5b7a5641
+291,France,FR,Cergy-Pontoise,e9c0a7b2-445b-4814-8b47-564ecb13100f
+292,Russia,RU,Burmakino,09499c37-78a9-416c-b1ff-f8adbc4a681f
+293,Greece,GR,Provatás,04d858b5-66c5-46ba-b306-f7e965837a6b
+294,Indonesia,ID,Mafa,c0a78a82-36d7-44f9-8c96-f5673ef31c9f
+295,China,CN,Hutou,70f3dc05-bdb0-40f8-9489-b214cd1c9ac2
+296,Brazil,BR,Itabaiana,e3c99ef2-7689-4348-b37c-2aaa1492ae75
+297,Brazil,BR,Bela Vista,cb4de548-e122-4d1a-bf68-99d5b769d94b
+298,Philippines,PH,Sibulan,0000c532-fd31-4797-98ab-ed1e51dec7ad
+299,China,CN,Jiangbu,6720fa28-73cd-4722-90c7-ec571f9d8685
+300,Canada,CA,Rimouski,b06181af-d6ec-48ef-a234-4be2d654790b
+301,Russia,RU,Perfilovo,b63609ba-a2ea-45a6-a1f0-24ba377a3bf5
+302,Thailand,TH,Nong Ki,9cda27d9-3bf3-4aa5-92ef-59a73934d7a2
+303,Canada,CA,Victoriaville,d8e73b85-18c7-4d20-bc0e-31ab20806b29
+304,El Salvador,SV,Ciudad Barrios,7fba0c3f-db66-4fad-a4a5-73de47ecf658
+305,Egypt,EG,Quţūr,1cab44f5-9386-4c7b-b2ff-c2ab4cbb6dbe
+306,France,FR,Paris 08,90bff502-7c11-41c6-81b2-1fe246ee7a76
+307,Russia,RU,Grigoropolisskaya,2d8f8b67-c50c-4b97-8bf2-ab07a75014ac
+308,Sweden,SE,Mölndal,796507df-4d91-4cdf-bd49-7c484aaa2096
+309,Syria,SY,As Suqaylibīyah,e2e3ff04-2b12-4350-9d97-4fd3102d342c
+310,Philippines,PH,Langob,ccd2f704-08ef-4eee-b716-5805d4de16bf
+311,Poland,PL,Książki,d49bf00d-3f09-451b-97aa-6df0c1db9ddf
+312,Ecuador,EC,Pujilí,0a69576d-3510-4a9f-bfe6-a032be5fded2
+313,China,CN,Jianyi,0be68732-4416-4c2e-978d-1bf2689a33f2
+314,Poland,PL,Wola Jachowa,a201aaa3-9819-4bea-acc6-60ae4aa86b04
+315,China,CN,Dongfeng,369dba3b-b4aa-415c-9b32-a24808ee4080
+316,Syria,SY,Ar Riqāmā,02d046f1-e109-4a0b-a5d9-7803440d7641
+317,Sri Lanka,LK,Sri Jayewardenepura Kotte,076ddbe8-943f-4238-9658-1343f4f30267
+318,China,CN,Nanyue,5e4abc84-52dc-41dd-aed2-aad72ffcc5f7
+319,United States,US,Dallas,3a6ce3da-dc78-4ff5-96f4-d6a80aa32a10
+320,China,CN,Fengjia,79e58c89-91e6-42ad-8990-b5568d2cbc78
+321,France,FR,Paris La Défense,ef195f88-8f95-492e-a99d-7a642bd41dba
+322,Macedonia,MK,Negotino,cc74bb21-8e42-4258-8dfa-7c5e376aae4e
+323,China,CN,Wupu,0b3ca6c8-6c26-4676-83bd-e1230e73c9d7
+324,Brazil,BR,Grajaú,be498dc3-2e0f-41ce-b9c7-92cc00240ab4
+325,Afghanistan,AF,Shahr-e Şafā,7aef31f1-b50f-41aa-b0a3-7569fbf2bd96
+326,Canada,CA,Grimshaw,169bc7a7-7aa6-456a-a482-ac0511804da8
+327,Norway,NO,Bergen,f9391844-c955-49e1-9a52-b7c1aab850a4
+328,Philippines,PH,Narvacan,da88b13a-096e-4a45-8043-13c528058d29
+329,Malawi,MW,Kasungu,e8f0caf5-e486-42dc-b65e-46e381865851
+330,China,CN,Hekou,3e3110d1-1767-45c6-ab57-24cbac62244c
+331,Thailand,TH,Fao Rai,668185d2-1a2c-4bb6-beee-afd8b726673d
+332,Philippines,PH,Dadus,093756cb-eb80-4648-9bf4-f9f8b1aefb97
+333,France,FR,Le Raincy,e78ef547-510d-46ec-962b-c697eeab3c7b
+334,Greece,GR,Áyioi Apóstoloi,1cd82863-5616-4646-a629-db12e95be859
+335,Czech Republic,CZ,Jablonec nad Jizerou,4b2798da-8556-4921-a3fc-1707404a49f9
+336,China,CN,Qingxi,bbd37237-389d-4cf9-9ab4-fa0f9a04a457
+337,Afghanistan,AF,Kafir Qala,c76035bb-5b3f-4cf8-829b-a6e59285aeda
+338,Japan,JP,Fukuroi,1021d144-5251-4136-89cb-d7090160f0e6
+339,Indonesia,ID,Mbongawani,c1e0cd92-48cc-419b-97de-66d5e0c8f325
+340,China,CN,Menlou’ao,ea8e5057-9dda-419a-8731-64f34a9eb1d2
+341,France,FR,Tournan-en-Brie,c2d10872-3d60-4516-b33e-84fc74fd5b93
+342,Sweden,SE,Gävle,da7a2aac-caa4-4212-ba8b-35ef6ff2a7c7
+343,Malaysia,MY,Kota Kinabalu,3e296db4-ff54-40e6-b59d-825ab08edff3
+344,Philippines,PH,Culubasa,1a59aa17-10f6-4358-903f-9fdd99e28b79
+345,United States,US,Springfield,6a67f99b-072f-4772-b9a8-b9aa3e1be5b8
+346,Democratic Republic of the Congo,CD,Kipushi,7cef8eeb-5d46-48cb-be4b-05c6a1dae157
+347,Japan,JP,Ōarai,f694c8e7-6233-4eac-a9bb-9996520d2358
+348,French Polynesia,PF,Vaitape,8194b553-f222-475c-a84a-f3de86ca68bb
+349,Sweden,SE,Järfälla,1d97fc4f-5d58-4642-9a56-1e369b3e698c
+350,Nigeria,NG,Bomadi,974470db-66cc-4a18-b9e6-8c486daca8ac
+351,Peru,PE,Tabalosos,b839ad15-7ed8-4057-a1a7-9c3ea1bd75e4
+352,China,CN,Xinglin,d9a599f3-62cd-48fe-b710-9edd4ceea310
+353,Argentina,AR,Chamical,9ef607c6-734a-4951-b619-c95810b15e28
+354,China,CN,Xishan,b5296654-f43a-4324-acb0-901aadee9416
+355,China,CN,Jinhui,4d52dd69-d976-455a-9b9c-73b475a9bfe0
+356,Sweden,SE,Norsborg,8da4ba55-01ad-4bbb-b633-66ddb1dd429d
+357,Philippines,PH,Santa Marcela,7fc600e2-cf58-4dbc-83e4-5e31adb51053
+358,Mexico,MX,Loma Bonita,51e4790d-9d9e-4c5d-828b-4b0fdce12dfd
+359,Panama,PA,Tubualá,06ae1c52-458c-4041-b307-34dc8bd9116e
+360,Russia,RU,Khandagayty,d32f0819-24b0-4a7b-be71-a5bca99527de
+361,China,CN,Axili,445f1ecb-ee8b-4d5e-a513-85b76347128f
+362,Indonesia,ID,Banjarbaru,51fc973c-d940-4a9a-8ecf-8e9e14e2b525
+363,Indonesia,ID,Lawepakam,8a530ef3-98cd-4560-bbbf-dfd416792327
+364,Peru,PE,Tres Unidos,132b8157-ea74-4101-894b-3f751afb9a1b
+365,Philippines,PH,Langob,d583c1cd-2d06-4c39-96e3-903d9b23133d
+366,Russia,RU,Malysheva,142c7b92-581c-495a-a1bf-2f88532263ae
+367,Micronesia,FM,Eauripik,a079efcb-7a80-4664-bf8e-0b5c2e184687
+368,Canada,CA,New-Richmond,56bd8978-3f97-495c-874a-658b1ad1864d
+369,China,CN,Jinshan,a8b8f95f-300b-4819-b02f-8e9857adaa32
+370,Malaysia,MY,Kuantan,684c011e-fd36-418d-9161-6f133e3d9246
+371,Serbia,RS,Nova Varoš,70191a2b-83d7-470a-8775-cd437df8a50b
+372,Indonesia,ID,Potulando,8c08133f-a9d2-406f-ba0d-9435ce8140f5
+373,Brazil,BR,Caçapava do Sul,2cba5ed6-83c5-44c3-ad2b-4a3b6961ebe9
+374,China,CN,Beigang,8b75d71a-c7ac-4c38-82a5-7b2f9bcc4e26
+375,China,CN,Wenxing,458227a1-fe6e-451a-985e-dd8b0490ed7b
+376,Brazil,BR,Ijuí,b1bb4d98-4c6c-453a-b3b0-8bb69484192e
+377,Colombia,CO,Aquitania,1af52cac-79de-4228-880c-21bf7b2fe6e9
+378,Indonesia,ID,Pining,d4855d36-5997-4a72-8566-212f5af72c5e
+379,China,CN,Xiajiashan,2ff8fc2c-0934-48ad-bd33-eeebd276dd31
+380,Philippines,PH,Quinipot,c87c5eaf-cc43-4726-a721-db1f7bfdd4cf
+381,Saint Lucia,LC,Soufrière,8c6514f8-783b-453d-a576-2c755b446386
+382,Brazil,BR,Diamantino,a19ec540-0424-42dd-ab75-187fe4e05737
+383,Bosnia and Herzegovina,BA,Tasovčići,f8658b69-8446-4e5a-86aa-75b21a5debce
+384,Peru,PE,Buenos Aires,00658ffe-d078-4fe7-9dda-83197bf6a950
+385,China,CN,Yaxi,8ae6b29b-6c90-43d8-bdcf-dbb057a4d9a0
+386,Brazil,BR,Jacupiranga,fb1232b7-fcc2-42a9-8d2b-653152541cce
+387,Guatemala,GT,Morazán,0d849ed0-637c-4e4b-94ed-70e1e43f9ade
+388,Burkina Faso,BF,Yako,d2979310-9fa2-40a5-95f9-7c15ab959fc1
+389,Mexico,MX,San Jose,9c52bd06-eb72-44dd-809b-0ffff9060b76
+390,China,CN,Wangqinzhuang,e73ccc5a-0b01-4416-b993-58f08dab7685
+391,France,FR,Saint-Quentin-en-Yvelines,0e3a9267-ae92-4b5a-8a3c-63851bdf8d59
+392,Philippines,PH,Moog,f0349dba-78a2-4999-ac25-3d687ccb4cf9
+393,France,FR,La Roche-sur-Yon,90b1b1d1-ab50-4b18-a4f7-3d76e8f85226
+394,Indonesia,ID,Magepanda,b0ecf8aa-0d4b-42fb-a6db-bca6970b429e
+395,France,FR,Bobigny,a93064a7-a48c-44b2-9ec7-421c9bd1035b
+396,Georgia,GE,Gori,0f2a17c7-d78f-4c6b-833c-39a6ebbf317c
+397,Russia,RU,Pashkovskiy,edc9dbe0-8083-4d83-ab49-1f6ee810df15
+398,China,CN,Muzhijie,a9a78f26-34e2-4bb2-88f1-63516ff318ae
+399,Japan,JP,Inazawa,4a35b109-bf81-42a0-bde8-d73e16213cb2
+400,Colombia,CO,Medellín,e5a59bda-0195-4eb7-9d29-ff3842531f43
+401,Philippines,PH,Mauraro,4b29ce46-3569-491d-b6c2-930692c27779
+402,China,CN,Taixi,7e2c3767-643a-49d1-98db-d2e194df6eb7
+403,China,CN,Dasiping,9cec8003-5873-4a20-a9e1-66f1fe71c37b
+404,Portugal,PT,Sabugal,ba4b3dd3-0403-425d-b664-2dece97d7f55
+405,Czech Republic,CZ,Valašská Polanka,12cd08b2-4d01-4c14-8b0b-8f30dfc293ec
+406,France,FR,Thaon-les-Vosges,05430ffa-6718-4063-9706-3334bce74d1f
+407,Afghanistan,AF,Nayak,330b8446-5608-49a2-9262-89463581b70d
+408,Indonesia,ID,Kota Trieng,50b810cc-43a7-4fe8-ba45-22a275d9d204
+409,Brazil,BR,Maraã,916de78b-38a9-4f26-a031-dca269af812e
+410,Sweden,SE,Uppsala,56e86826-647c-4a26-a77c-20e24c227934
+411,Indonesia,ID,Condong,af82d671-5827-4dbc-85c7-f3a44a42f3c7
+412,United States,US,Topeka,a23a45de-06cd-4ac8-9b05-40627d1c70c0
+413,Canada,CA,Fairview,6938d39c-d4ba-4aed-8995-1989e0ac0071
+414,Netherlands,NL,Amersfoort,f083d6a0-07ce-4125-89b4-6df5b8082c46
+415,Indonesia,ID,Sogati,085f4caa-2a1e-4848-b45d-b04cbd25ac3a
+416,France,FR,Forbach,0f3074b5-4a2d-4392-892e-4f204ea57ff2
+417,Croatia,HR,Podstrana,ee55a7db-3f06-4a4b-b9fc-8cc6223efbfd
+418,Portugal,PT,Vale Mourão,05f51d65-2893-4124-ba5e-ce991c545d9e
+419,Croatia,HR,Brckovljani,6eb514a6-eff2-481d-813b-e678d158be49
+420,Sweden,SE,Askersund,3fd459b3-bb0e-4244-80d9-aca6c2863232
+421,Panama,PA,Alto de la Estancia,66667c87-dfc8-4248-be39-d0a5086d8ad4
+422,Saudi Arabia,SA,Ţubarjal,1115403f-d0dc-4023-88d8-2d219a4898c4
+423,Egypt,EG,Damanhūr,e8a0f78c-013e-4885-9452-1b98f9ca1bef
+424,Sweden,SE,Storuman,8a780e5a-8ea4-47ff-98e9-55c31c5d3d5a
+425,Russia,RU,Chernomorskiy,9aba071b-8a91-4909-bb0c-0b9541ca6f78
+426,China,CN,Huji,5bc8e176-56eb-4808-97a7-7e990ca940e9
+427,Portugal,PT,Vinha,28223c7f-07f4-45f5-aa35-a729076ba987
+428,Haiti,HT,Ouanaminthe,09f60a5d-f3bb-4ab2-ad05-c8c079c8545b
+429,Croatia,HR,Bilice,14ff607a-8bd4-4b82-96f4-521406b205e4
+430,China,CN,Waishan,6d2e5efa-d6e5-4b4d-8886-243d8f623c00
+431,Russia,RU,Pallasovka,09f2869e-284f-461c-92f6-2264990aaf1f
+432,Russia,RU,Slyudyanka,75ffc4a9-0db3-4a4b-bdb2-172b52b1469e
+433,Portugal,PT,Cotovia,9c77e8a0-a022-4da6-98ac-11c7a58fba99
+434,Philippines,PH,Alibunan,3fe4e7e5-86d0-4978-980d-77c96208c1cc
+435,Poland,PL,Czerwieńsk,fe43e8a2-7bf7-4a12-9e4e-374503546a99
+436,Ecuador,EC,Santa Rosa,c3d98be3-6d1b-4103-97a1-b65c53309c9b
+437,Czech Republic,CZ,Nýdek,9b264a26-5aae-401b-b531-0683fc0a4f12
+438,Indonesia,ID,Gupakan,5ecc045d-1963-4b4b-8dbc-bcdce44ccdae
+439,Poland,PL,Mirsk,efa81fd4-fa74-4945-b597-304757c3fd04
+440,Indonesia,ID,Tembau,f250168f-8e2e-4bc2-b33d-34a00a3e57df
+441,China,CN,Wanli,559a63cd-9d59-4b18-8191-b9dbfb13f33c
+442,Ukraine,UA,Volochys’k,33b36839-5119-4f45-9f03-ad7494f278eb
+443,Saint Vincent and the Grenadines,VC,Barrouallie,68c58e1c-73f4-4f21-94c6-e0edade7396e
+444,Madagascar,MG,Ambovombe,9a04d620-5754-49b1-b7cb-fe221c643238
+445,China,CN,Gaopai,098d32d3-4e7f-4b7b-803c-08811d3ca3d0
+446,China,CN,Liujia,ef0f7cfa-e95a-48fa-b809-4f95622853d4
+447,Argentina,AR,Curuzú Cuatiá,55e870ea-092d-4931-9d36-9852bb017294
+448,Macedonia,MK,Нераште,423f80cb-13ab-4f6a-be1e-d55354588d43
+449,Azerbaijan,AZ,Amirdzhan,e5042932-8617-44af-92c1-04d748e32700
+450,China,CN,Qiulu,5224bb82-588b-4b4f-b0e9-3f344c97f60b
+451,China,CN,Xiaowuzhan,45691124-14c8-4a5d-a734-64f039e6dfc0
+452,United Kingdom,GB,Ashley,e5fc696e-4d9a-4169-8cc9-23db6cbbd141
+453,France,FR,Niort,51edbd47-387e-4ef9-bd26-5b9fa7122ccf
+454,Mexico,MX,Solidaridad,3abdeb09-76c5-4c98-b48a-87a3fe004a21
+455,Russia,RU,Pikalëvo,dee4c865-dcab-448e-98c1-bdc369dc2b5c
+456,Reunion,RE,Saint-Denis,6d8c0887-fdb5-4fec-b670-76f388bb80f3
+457,Indonesia,ID,Birowo,bff832a3-f8f1-491c-9c38-298fce60a160
+458,South Africa,ZA,Tembisa,e923c3f4-aaa2-42c9-89af-74e7fb1701df
+459,Greece,GR,Skoútari,0c8e76d6-cbf1-4ee2-bc0d-d54150a4c338
+460,Greece,GR,Thymianá,0b06957a-c225-4c7d-9484-5c778a175d67
+461,Mexico,MX,Bellavista,e1d69c4a-398f-4f60-8d85-54b7d3a60f9c
+462,United States,US,Houston,107bec4e-3245-41d3-b487-ccaf79c8db99
+463,Colombia,CO,Albania,a1a0d739-7760-48c8-93fd-d4556e427580
+464,China,CN,Linshui,e69b94b5-16ce-4e15-86da-fa05116c34e3
+465,China,CN,Dawangzhuang,10aeb5fa-797a-4f48-979c-6eb634e5b812
+466,Finland,FI,Uusikaupunki,a4818a90-6409-48f5-ac14-9ddcd5250778
+467,Ethiopia,ET,Desē,16b61ebb-ee66-416c-9848-5760c5430fae
+468,Portugal,PT,Vilarinho das Cambas,a79ac45b-7c07-499a-8641-75d98f1a2219
+469,Portugal,PT,Casal,de978d16-4983-41e3-9d35-74658ff6fc87
+470,China,CN,Da’an,0bfd221d-ca92-4e64-b17b-1da27e1f529d
+471,Philippines,PH,Baliuag Nuevo,a74476eb-270a-4899-be18-a1d3711b3562
+472,Philippines,PH,Laoag,901fc1bb-3adf-4322-84e1-7b1bb709e315
+473,China,CN,Huangshui,ac637f58-74b8-4c4b-8348-132d8877a67e
+474,Morocco,MA,Skoura,541efbed-cd19-4af4-9813-07eb0172953a
+475,Norfolk Island,NF,Kingston,f41e13b3-ea02-46db-9fab-f6c3755e5ea8
+476,Mexico,MX,San Francisco,458c3907-1bd6-44e8-843e-845c33eec402
+477,Ukraine,UA,Ovidiopol’,64be1bc4-fe43-448f-868f-d95afe140e76
+478,Russia,RU,Staronizhestebliyevskaya,085ac8be-bb32-4ea0-8d5c-d00b1257a306
+479,Indonesia,ID,Ajung,b5c5f12a-bcf9-48ec-9904-c265b6e815aa
+480,Sweden,SE,Skövde,766fe5ed-0b23-4e38-90e3-afee05128ec7
+481,China,CN,Longfengba,95d52ecf-1252-472b-b4a1-74e1a7c05629
+482,Lebanon,LB,Ra’s Bayrūt,3be3357c-5f4f-472b-b31f-13651d645fff
+483,Chile,CL,Puerto Natales,4079bcab-d1d8-41db-a4ff-8c62e059261a
+484,Ukraine,UA,Synevyr,d96b3743-d118-4ca4-aad9-80a54724d5ec
+485,Poland,PL,Siemkowice,67a275b4-57bc-4922-9fce-4c313e2f3958
+486,Brazil,BR,Unaí,d87e16e0-8b92-4f85-9ba4-009dbf6ef9b5
+487,China,CN,Weiyang,651c6f9f-4202-42ff-9510-3a7fa39160e7
+488,Dominican Republic,DO,Punta Cana,f7857a26-173d-4438-b9a8-ba9f0c569bf4
+489,Russia,RU,Murmino,2a56f0ef-25b2-4616-943f-e237e4c79e8a
+490,Peru,PE,Longotea,6bcd876a-35cf-4282-99e1-ba2a67f2f6d2
+491,Indonesia,ID,Pahing Jalatrang,b77f0f30-fa44-45e2-96d6-ad635ca8e65a
+492,Argentina,AR,Huerta Grande,9ddb7a35-090e-474d-9e77-6d9d5dd5d0af
+493,China,CN,Tuanshansi,f263a1ba-a016-4b8f-a033-c434748b2ab8
+494,China,CN,Pukou,bed66b71-1cd8-4e8c-910d-4cf2f696eedc
+495,Sweden,SE,Timrå,ec5a0032-32e2-4c66-a62d-1e968b132277
+496,Mexico,MX,Santa Cruz,966a3777-4d27-4e9e-a17f-f2bdfaccfff7
+497,China,CN,Sanli,30ca6c57-2dd0-417d-990f-9a0f3053dbcf
+498,Philippines,PH,Isulan,b69b93c6-101c-41c4-927c-03701a4b16b2
+499,Indonesia,ID,Kolbano,539fda3d-ccc0-4efa-a976-d336ac598236
+500,China,CN,Chenjiaba,690089fe-2a04-49f2-a993-f6e2fcbeb324
+501,Indonesia,ID,Beskolen,52e0e88d-5660-4bf7-b3a0-720f211dc644
+502,Indonesia,ID,Manukaka,89866148-b06f-4439-b71a-783d0b5f930a
+503,Portugal,PT,Barrunchal,d449d034-b24e-4f7e-99dc-8b9c74ce800c
+504,Thailand,TH,Noen Maprang,53c46b3f-a598-477c-89fb-51f48b751a4c
+505,Brazil,BR,Propriá,74612a11-deb3-4673-aba4-7366ac1b3487
+506,United States,US,Seattle,35714bc3-7fa5-4aca-a880-db958e0fa439
+507,Indonesia,ID,Lasusua,9ec94e8d-dedf-456a-a9e0-8ecd2474fa2a
+508,Mongolia,MN,Jargalant,d48b646c-c9c0-485b-a294-541704d40be6
+509,Sri Lanka,LK,Unawatuna,248e1a80-f0ab-41c1-a664-86dde31c33e9
+510,Czech Republic,CZ,Lukavice,122e2535-7f83-4fd7-b1be-eb5f32d91b2a
+511,Russia,RU,Novopavlovsk,68a8addb-9cb5-4e48-bc53-89c6995adcb9
+512,China,CN,Yong’an,13441678-c2af-48b6-b65e-1aecf991e91c
+513,United States,US,Milwaukee,02235ad3-09cd-42f1-a7e1-fe9ee31de8c3
+514,China,CN,Baitouli,4817e7b2-abdc-4e84-996f-a2d87cd97514
+515,France,FR,Nevers,f47b4a0e-14e6-4a0b-bd4a-9c03de503a4c
+516,Malawi,MW,Luchenza,84f9d8e0-ab17-4980-8cbc-b4cb030de99f
+517,Colombia,CO,El Copey,994a26f7-fac0-46ac-bf48-cd7a5b6e7d07
+518,Japan,JP,Saiki,0ca4681a-bcc5-421a-b248-b295aff6fb53
+519,China,CN,Nanyang,cdbaadae-c8bb-498a-b2c8-8b330737208b
+520,United States,US,Houston,0ad19d0b-2b87-43fc-8e7b-661855a01a7c
+521,Sweden,SE,Årsta,6f2a24af-b958-4546-9c3c-8f35cc260da0
+522,Tuvalu,TV,Funafuti,c4e0e9c7-ded6-41de-8b8a-aca69cf55699
+523,France,FR,Caen,ce70c307-1d70-42df-80e6-e2a8148616fb
+524,China,CN,Yintang,53f30d5b-7dc8-403e-a9e2-2110e5dc42ea
+525,Indonesia,ID,Cigadung,313dd3cc-e627-4d12-9415-2d84d4a03692
+526,Netherlands,NL,Leidschendam,8bb0fb25-f9de-471c-8c27-0b81332ff129
+527,China,CN,Liangshan,d63078ac-da9b-44f9-a209-b582dcf5971f
+528,United States,US,Albuquerque,937a39ac-1138-4179-a62e-c2389d7214e9
+529,Greece,GR,Níkaia,a52a6746-dd81-4130-85e9-ee28c0f3f08b
+530,Philippines,PH,Lubao,71d8a188-25d4-40d0-af75-03d29a9e4c1d
+531,Brazil,BR,Mauá,5787ea4a-2e54-4e1f-a2c7-0bd806aa9bd9
+532,Philippines,PH,Balbalan,0b465e94-cdbf-415b-b784-f5ec975ed148
+533,Sri Lanka,LK,Sri Jayewardenepura Kotte,7ecc746f-d187-42e9-a512-bb242d8c4a19
+534,Russia,RU,Ivanishchi,f1992147-29b2-4211-b5e5-c76aa28dd258
+535,Israel,IL,Eṭ Ṭaiyiba,f7c200e7-dbd2-44ff-91c3-c29a4d642675
+536,Mexico,MX,Reforma,ba3e9174-1e92-4475-9e21-c6621bc43427
+537,United States,US,New York City,e47108f0-7845-4599-b290-6ce34ddd92f5
+538,China,CN,Shanghu,5fd16d65-6fc4-4bd8-aa5a-06401cdda740
+539,Portugal,PT,Monte da Boavista,80733def-e46d-4bcb-b1d2-2adf10322046
+540,Greece,GR,Pentéli,a40787da-83b2-421e-b8a8-f1eeba67a905
+541,Cuba,CU,Jatibonico,2a9534ab-78d8-4129-a5eb-2aa8cdb4d8b4
+542,Philippines,PH,Malinta,1d7dae42-57c8-458a-b4e6-ddd81ff8acab
+543,Pakistan,PK,Kanganpur,18efb565-dc54-43e5-9cb5-22d5d8d48126
+544,Brazil,BR,Santo Amaro,a8037958-a33e-4eb6-a691-eb5b51f6795d
+545,Indonesia,ID,Padangpanjang,846e75c6-f10b-4e63-b653-832530b42b99
+546,Panama,PA,Las Tablas,cb08c9b5-8a1d-4fbd-bcf0-e2806b5d1241
+547,Greece,GR,Káto Dhiminió,eb4aa7a4-7747-441a-8b20-dd86f4007131
+548,Japan,JP,Tōno,ad6f6fd2-03f1-4474-8303-c9f05b5abd45
+549,Indonesia,ID,Padasuka,98b9f9d5-648b-4ace-bf7b-f4be5095cb5e
+550,Poland,PL,Czarków,a64d5aec-5d87-4024-beb2-18922d6dd227
+551,France,FR,Vendargues,c1d203a5-0133-40b5-af88-06ddf093a1fb
+552,Greece,GR,Néa Péramos,e0be5a8c-7404-4585-bdf1-87d858e1c748
+553,Dominican Republic,DO,San Pedro de Macorís,815d2d33-4df2-4e2e-bd00-1b41e812279f
+554,Tanzania,TZ,Dongobesh,6f26e58b-3763-4954-9f61-61bd5a0a4b58
+555,Afghanistan,AF,Khūgyāṉī,b0b2b2c1-ea68-4bd2-8340-fda27d48f62d
+556,China,CN,Panshi,1b1a1218-5e52-4fe9-a6dc-6701874f500a
+557,China,CN,Wucheng,42780b29-f7e3-438b-b3bc-14b177138350
+558,China,CN,Shengshan,77b3d9ba-2c8a-47aa-b3ba-2954bc3c6633
+559,Russia,RU,Volgo-Kaspiyskiy,028cbed1-266b-44d4-a523-cb0812df4b99
+560,Vietnam,VN,Thuận Nam,6855574a-3ef3-43d8-a421-51d9d0489624
+561,Ukraine,UA,Melekyne,d3cabe45-bf3d-41ac-ab4b-c21f2a7f6765
+562,Thailand,TH,Mae Lao,50bc8439-8b85-4a8e-a004-413441d5d31b
+563,China,CN,Laoshawan,c13d6fcf-849e-48da-8b7b-5e84f95c223a
+564,Kazakhstan,KZ,Timiryazevo,5e503e05-4bf6-41fe-9463-6a8f6d3ba7d7
+565,Kenya,KE,Kakamega,9e86f8c3-e8d4-4f93-9811-1dcc7766c9e5
+566,Philippines,PH,Caibiran,607c6406-b0cf-4c05-b72e-ac1cb1351a78
+567,Ukraine,UA,Hlyboka,08c86844-683a-4f4b-afd1-fb71a7f06e7e
+568,Yemen,YE,Lawdar,89090898-8820-4093-9149-94580a1dc096
+569,Sierra Leone,SL,Masoyila,1700c54c-9497-4ae2-9d86-fbb3643f659e
+570,Brazil,BR,Jeremoabo,b8b734fd-588a-4c68-9ee3-93bdc999bfd7
+571,Japan,JP,Tondabayashichō,184a49d8-dcbe-4897-9a94-46e0de6679e5
+572,Peru,PE,Huamachuco,c959affd-2535-4be8-84d3-70932e0627b3
+573,China,CN,Quanzhou,4b0413c5-ea73-4d67-b52d-b4828cc44d8e
+574,Canada,CA,Aylmer,81041157-6bba-46d6-8624-758ad994d9c0
+575,Portugal,PT,Lameira,dcc6e9f1-d243-4d27-b927-ae0107aba61a
+576,Greece,GR,Ampeleíes,76471ec3-a0f0-49cd-8a7b-39d605882445
+577,Poland,PL,Puszczykowo,5b43647d-28f0-49de-b43c-277ad602387e
+578,Sweden,SE,Örebro,3c2e131d-c4dd-451b-adea-5760c2bd83f6
+579,Ukraine,UA,Verkhn’odniprovs’k,9ad87c90-3b94-4bbb-b4ee-41930d236245
+580,China,CN,Weitang,2b4f8ce9-4c71-4e14-a31c-4bc89a28d95e
+581,Indonesia,ID,Sebegen,2dbe36c8-854f-496f-bf34-7db2ae3d3d71
+582,China,CN,Taobei,3fd0d67e-4708-40cb-b0e7-a65a0019ce80
+583,Venezuela,VE,El Corozo,65a70ccf-d8e1-420a-92c1-c16ba9c1d563
+584,Argentina,AR,Garupá,6f9eb70a-b86c-49bc-8ab3-7e02def16406
+585,Ukraine,UA,Verbivka,b49fb045-afe1-4091-8f63-54800d09273e
+586,Lebanon,LB,El Hermel,b21a3264-8dad-429e-86ad-bde6790db7dd
+587,Sierra Leone,SL,Binkolo,bdde5072-219f-4824-af61-2c9c2758abe9
+588,Philippines,PH,Santa Teresa First,9df8946a-b90c-4ff3-b7a8-17902be3794c
+589,Philippines,PH,Pandan,ea866858-ff37-44ca-ad33-b2851c9fe9d9
+590,China,CN,Huangzhawan,e0f3dbc8-3c1d-4d36-bec8-9e9e854f257b
+591,Russia,RU,Tikhoretsk,53b3e326-3ac2-4fe1-9513-36939d976716
+592,Mexico,MX,Ignacio Zaragoza,4b79676f-a06a-480c-af9b-51a97714433c
+593,Greece,GR,Melíti,765c1781-649c-4b3c-894b-ef65dbc16ed7
+594,Central African Republic,CF,Sibut,09565fde-d896-4e7c-bff3-ec587614d655
+595,Sri Lanka,LK,Tangalla,0246161c-0e00-4549-bc28-6ad14d7f8771
+596,Russia,RU,Vatutino,0df7a8e5-14fd-453b-9a10-fef47ded228e
+597,China,CN,Yunlong,ddf8d0f6-277c-420f-8729-ea6e5de848c4
+598,Kazakhstan,KZ,Tasböget,685fbb5d-bd9a-40e8-a642-a95f775e5e78
+599,Indonesia,ID,Krajan Nglinggis,da5a226c-b467-4fb4-8b8d-715d297c7f63
+600,Poland,PL,Czerniewice,7021c522-6758-47fa-9e2b-52416a6f8c80
+601,Finland,FI,Tuusniemi,765a0b3d-c257-4904-b07e-71ad11fa66da
+602,China,CN,Dongbian,cf434cd3-a748-4cc3-85f9-99fa0732fcc1
+603,Vietnam,VN,Quỳ Châu,4b40a04e-481c-4a04-b39f-e1e27358febb
+604,China,CN,Huainan,73e00fb1-8690-4180-8a60-c83bd8514874
+605,Russia,RU,Dikson,3812fc8b-c841-45db-b42a-682356f99cac
+606,China,CN,Dongfanghong,5abed8a4-1332-4f21-8dd4-3266d632febc
+607,Poland,PL,Witkowo,69bbb794-f6b7-4e2c-a89e-3e9fc693061b
+608,Macedonia,MK,Матејче,7f15c62e-0194-4c9e-85be-4bc349fdae56
+609,Indonesia,ID,Baleber,4b1eaab3-900b-41d3-8e0f-8a7966b17c65
+610,South Africa,ZA,Margate,dd1fbf8d-df80-456f-8b37-1351e5751df8
+611,Afghanistan,AF,Khafizan,463d7804-e08a-4dbf-a086-888648b80b8d
+612,Iran,IR,Nūrābād,f4fb362c-eb00-42e6-9f60-cf2d4835b59a
+613,Russia,RU,Pitkyaranta,58fe887c-a703-430c-a6f4-63f2944593a3
+614,Pakistan,PK,Mīrpur Sakro,43f31f5a-4bb2-4ceb-b19e-7adc58ef5923
+615,Brazil,BR,São Miguel do Iguaçu,179d8e13-13ab-4fc9-9121-888787430ab1
+616,Luxembourg,LU,Mondorf-les-Bains,6146b32a-ffb8-436c-9910-755285dd4916
+617,Poland,PL,Dolsk,1dadb5c8-bd38-4ee9-b063-c95944c2c5b3
+618,Honduras,HN,Quebrada de Arena,94a2c7f9-75ad-4f52-a3b9-26b9f50f400d
+619,Macedonia,MK,Centar Župa,0c1fae2a-a7ac-49b5-a967-2ab4c2758209
+620,Portugal,PT,Sande São Lourenço,7dcc693c-8164-4a56-93c0-763d295635bf
+621,Indonesia,ID,Lewobelek,a866a017-c669-4c6b-8b0d-221ff4ed86c1
+622,Russia,RU,Bryukhovetskaya,b36e701f-7e43-4d03-b729-f9c01af80bde
+623,Spain,ES,Vitoria-Gasteiz,c49212da-f540-4ec8-9289-b135165af97e
+624,Philippines,PH,Bantogon,e14c672b-5c0d-47d5-8095-1443843ecf06
+625,United States,US,Cincinnati,b09af899-2179-4ba8-a35f-67073e51d2c1
+626,Senegal,SN,Nguékhokh,cc64208b-556e-426c-92a5-20203a7358be
+627,Portugal,PT,Portela,e29c90a5-55c0-4f87-af3d-583636682441
+628,Syria,SY,As Sab‘ Biyār,f4a03eae-cfc8-4d62-ac37-56c84a0cead8
+629,China,CN,Hede,c5dae0fb-0103-4bf8-beb8-a8312dcfb5db
+630,Croatia,HR,Pazin,b12d666a-7f19-436c-87af-c43ee394204b
+631,Philippines,PH,Mantampay,d2ca6c4d-4c18-4bb2-9e2c-280ef0907124
+632,France,FR,Tulle,b1167057-cbda-43fb-9d5e-d29f978a217c
+633,France,FR,Décines-Charpieu,50b7a18a-a53a-4b1b-ac6f-ccf6a3e03eee
+634,Thailand,TH,Ban Talat Bueng,2a211373-0d22-4a60-9d90-7778962c72bc
+635,Greece,GR,Kariaí,782ad89d-647a-464f-b708-d8c8255b95e0
+636,Portugal,PT,Castro Daire,46f1e477-ac86-4ad4-bc70-2736dc6bd609
+637,Brazil,BR,Sete Lagoas,5407471e-6d0b-4d2b-a736-a73e382e7947
+638,Poland,PL,Sietesz,cb6134aa-1b80-4845-b403-bd69257e8187
+639,Sweden,SE,Strömstad,a1f79c54-ba6e-4380-904d-f45b30c4894e
+640,Panama,PA,Sioguí Abajo,2167456e-0177-454e-a3e4-8683e96f68e6
+641,Japan,JP,Hamanoichi,a7c6f9de-58a1-4192-8f15-b2a9a90d659a
+642,Ethiopia,ET,Gorē,0a32df49-2c95-4a8f-af1b-2b873e775791
+643,Chile,CL,Santa Cruz,18e23b50-ef14-4580-8d74-6dbfefa86423
+644,Russia,RU,Revda,f50d5f40-3e2f-43ac-9ed4-45c3f3b1152e
+645,Indonesia,ID,Johogunung,303304fa-d7d7-4d49-8a64-b58aeb6c3fc4
+646,Ukraine,UA,Obroshyne,4f4e4a02-d4b2-48cc-9716-ffc285652dfd
+647,Brazil,BR,Guaíra,a22fcdf7-6e7c-4e81-bb89-0bfe075c1117
+648,Poland,PL,Darłowo,2c7f21b2-3b65-4d2d-815e-dd50e979b613
+649,Nigeria,NG,Lokoja,0da26792-d7c6-424d-9fa1-7cd108725f77
+650,Chile,CL,Panguipulli,88997e8d-ff11-4f0b-8db8-3a4b16193c97
+651,Japan,JP,Sagae,c4730254-8ff2-44be-be77-667303062cdb
+652,China,CN,Qijiang,382ab6dd-d0ff-433b-a09d-d6aae505ea45
+653,Indonesia,ID,Patrol,66a981c8-e6be-4e39-93db-cd082117a869
+654,China,CN,Hadabei,d4f63c47-97fc-403d-b539-2704b654300f
+655,Russia,RU,Medvedok,2e0f48ab-4ef6-49af-b9ee-52550af10551
+656,Indonesia,ID,Alak,b7847c1a-c569-4bdc-b369-062cf3a3df6c
+657,Poland,PL,Bobowa,fb1dfc70-20bc-4348-b52e-3ea3b4c8e463
+658,Poland,PL,Ludwin,6247169d-5471-4fdb-a179-32bda2ecb00d
+659,China,CN,Shi’ao,0919eaf3-b7f1-4763-ae70-50b1326360f4
+660,United States,US,Oklahoma City,0b0d6e05-b071-4e43-9b76-3b27d4ee4585
+661,China,CN,Guchang,7d547e38-b27c-45c1-a0f4-a885fdd9fbb6
+662,United States,US,West Palm Beach,472cdf7f-1635-4226-97ef-f49662154ebb
+663,Sweden,SE,Jönköping,9c97045c-6854-4437-9305-560c4cd646d5
+664,China,CN,Xikou,acbf1ffe-ef61-4659-92b8-54a2bc79be94
+665,Serbia,RS,Dublje,10a3032c-aa27-4660-a237-d5127611635d
+666,Nicaragua,NI,La Libertad,0cf8d981-a679-45dd-9136-dfdb8cb42aa1
+667,China,CN,Shaguotun,7d09f486-a783-4f88-9602-5c6879009e3f
+668,Russia,RU,Yam,ad70c5cc-7e66-4cb4-b8c6-d08a8b0f10e0
+669,China,CN,Guanlu,44cc01a7-0dd4-4530-92b6-b2c5a3faddf0
+670,Philippines,PH,Pudoc,63ff8896-6405-46d0-b551-e553f2718fe9
+671,Ireland,IE,Castlepollard,2adc0402-c42d-42e1-9764-df2eb07c38c0
+672,Peru,PE,Santa Rosa,1ae6715a-fa15-403a-a562-bf12d9c31c2a
+673,Kazakhstan,KZ,Aqtoghay,97cfe79f-8d28-48c5-bb14-71085fd8c0de
+674,China,CN,Fuyu,d0e28c30-36f7-4caa-b456-441d7abbc505
+675,Azerbaijan,AZ,Verkhniy Dashkesan,3906b5b9-45b3-4c50-b7d3-f158248f07db
+676,Greece,GR,Patitírion,444ca598-1d76-4d3b-b7f6-90eb55a696c8
+677,North Korea,KP,Kosan,51285cc8-1070-459a-afbb-8fdfcb2bc076
+678,Canada,CA,Martensville,2d189162-c57d-40d0-965a-d6279e6c051d
+679,Philippines,PH,Manaoag,ffb8e414-5e68-40d4-a7c6-bceef6788e59
+680,Thailand,TH,Wang Chan,a32138d2-7668-410f-b7b6-2deee013ca7a
+681,Philippines,PH,Capalayan,dc63418d-8ba9-4a77-9678-b98e010dda13
+682,China,CN,Futu,aca4f878-5291-4beb-b1f0-81b9721d51f9
+683,Myanmar,MM,Pathein,a2492719-bb18-44b3-a7a4-4d78fe6e2a71
+684,Indonesia,ID,Babakanlapang,2c4bfc62-0033-4fc5-9c2a-9088096fd7fc
+685,Sri Lanka,LK,Talawakele,0beae2dc-5e80-4dd7-ba3d-94eb8991bb5f
+686,Bolivia,BO,Huanuni,9c8c9e88-10de-48d4-9614-edd1671f88f3
+687,Indonesia,ID,Asembagus,e206e3dd-e0a1-42bc-9e7d-5d45f8bb463a
+688,Sweden,SE,Göteborg,39c5c126-d650-49c7-a40e-107221c3095e
+689,China,CN,Youfang,ffd28c2a-4419-474d-accd-be59a8744239
+690,Argentina,AR,La Poma,41d28458-2ec3-4b6d-b416-4eae54cd4196
+691,Colombia,CO,Baranoa,90eccd9f-ef9b-4780-b932-0298e19944f4
+692,Philippines,PH,Matabao,e870669d-6de8-4891-9255-376c0ccfbbae
+693,Japan,JP,Yamoto,69120961-f708-4a7a-b7a1-967c15baff8f
+694,Vietnam,VN,Thị Trấn Tân Yên,90129717-1b88-4f68-9b3d-42d32c383ad7
+695,Indonesia,ID,Karangasem,c5dab327-be8d-4063-81fe-663070a86454
+696,Thailand,TH,Phayakkhaphum Phisai,cbd640b0-099e-4891-9a20-4cac382dc54c
+697,Canada,CA,Orillia,c9ad0cab-367e-4932-9655-a72e3107a969
+698,South Korea,KR,Heung-hai,9e2a167c-fd96-456b-8df3-f9ca36906c0a
+699,Peru,PE,Muqui,e0753d82-7d0b-40bd-8a23-138b41be833d
+700,Venezuela,VE,La Esmeralda,fc08d979-d942-4b0e-904a-39e336aee15c
+701,China,CN,Qingyang,3b81db79-dcc1-4cbe-ac20-932fdb119e1d
+702,China,CN,Wan’an,e17f033b-1492-4f39-b9a7-b3410dcefb32
+703,France,FR,Montélimar,eff6140d-ddc9-449f-b492-91fd6032f988
+704,Brazil,BR,Londrina,2f402bb8-a1fb-449f-9be0-fcc50d8dbfb8
+705,Czech Republic,CZ,Rovensko pod Troskami,a67d9022-dced-45b1-a12f-b496bc2d2a73
+706,Portugal,PT,Midões,b83d17d1-4bf0-4c8e-abae-990080b65eeb
+707,Venezuela,VE,Sabana Grande,4e3d411d-e838-42b6-8b6b-abca7874df3f
+708,Afghanistan,AF,Kalān Deh,c51b8be9-2f6b-45c8-a7cf-d716998724fd
+709,New Caledonia,NC,Fayaoué,4748fea9-c315-4b3a-898f-47b0b47bba08
+710,Russia,RU,Kotlyarevskaya,f50b5c8f-7184-433e-9bc4-9fad4b502d8b
+711,China,CN,Wuluquele,570b7cda-58e6-4067-8469-7dd6bec53514
+712,Cuba,CU,Artemisa,8b1ea2e9-41b3-47ff-8935-71be930f0bbf
+713,Portugal,PT,Pego Longo,3cc0c655-b9d9-493d-89f4-efbe3eefa6b3
+714,China,CN,Sicheng,f7979e9e-d2cd-4831-9d1a-bfc0c2100e3d
+715,China,CN,Huangmao,b00aa79b-75ce-4d96-ad0f-17b695ad6fbe
+716,Russia,RU,Bystryanka,d986f53e-4f44-4c93-87c8-8fcba6a89083
+717,Ukraine,UA,Brailiv,b21cfbe2-c329-48b1-8507-eb0e764213f3
+718,China,CN,Shaoha,bab7e2fc-cad4-41e4-9a90-af289e262110
+719,Philippines,PH,Viejo Daan Banua,0179f27f-0f9f-40ad-bed2-58d7e56ae607
+720,Russia,RU,Poddor’ye,17433d6f-095b-4129-821f-babb71c48679
+721,China,CN,Nailung,a0727bbe-2ae1-42b3-a8cc-74e52c37d2b9
+722,Indonesia,ID,Kauhan,3a2a0d08-ef65-47c7-960e-deee4b688150
+723,Belgium,BE,Ninove,68c870b0-5ecf-47fc-8f79-e9e2993ca2ba
+724,Spain,ES,Pontevedra,e5649b4d-1e59-44ef-bfaa-fb85d3e5690d
+725,China,CN,Xindi,1349ceb9-cd15-444b-823a-dd771c84fa20
+726,Mauritius,MU,Ecroignard,05443bd5-04d7-430a-a0bc-0f39ff7e4c35
+727,Indonesia,ID,Pakalongan,8cb3e4e2-cc43-495b-8e84-d4b23294b413
+728,China,CN,Heichengzi,2f098027-cd97-43c7-9402-3b38f922acb8
+729,Brazil,BR,Frederico Westphalen,a0ba5f72-e146-451e-9d50-733c39ffbb13
+730,China,CN,Huangge,884485c0-e413-4d44-9769-3c53fe8ab114
+731,Portugal,PT,Gandra,523d3ff9-c16e-48c0-a274-2a09bace9d62
+732,Poland,PL,Jadowniki Mokre,d399c11e-1d1b-4708-bebf-0c680ddddd88
+733,Poland,PL,Końskowola,d5fbbfb0-97d1-4805-8305-d42842d155a7
+734,Czech Republic,CZ,Černá Hora,51d96104-86b6-4ea8-bd7a-3a3e4033b5ad
+735,Ukraine,UA,Zboriv,2284b0bf-465d-49a5-88ca-e4c83e4d6882
+736,France,FR,Noisy-le-Grand,6225927f-341d-441f-8da0-fecea6b9d0ed
+737,France,FR,Paris 12,47490b67-9edd-415f-b6a4-5ad1ff006c40
+738,China,CN,Bao’an,6c17ebbe-ca07-44b9-855e-66c7077539de
+739,Hungary,HU,Budapest,80db3b93-4a9f-4b58-90a7-062e0bff9afc
+740,China,CN,Wuluo,77a85f6f-5a21-4f23-8998-f7062f32e0be
+741,Mexico,MX,Obrera,7253eca8-07d5-4929-985b-06ea0aebb5e6
+742,China,CN,Panjiawan,369675e6-0a27-4ed1-a7cc-8bf13929b6da
+743,Sweden,SE,Stockholm,a9e3f9a7-c655-486b-814e-63cd62a8d952
+744,Portugal,PT,Vairão,5ddfed9f-b7fa-4201-8fa0-106168d68469
+745,Sweden,SE,Mariestad,66825365-6524-4b5f-8e05-557abe2b6f63
+746,Morocco,MA,Rabat,05bb2fd3-91c5-4588-82a9-df4fb5922a3d
+747,Thailand,TH,Pho Thong,c066b977-c355-46cf-ad4b-e6f764cd9f1f
+748,United States,US,Kansas City,2f590a8a-ddb7-463a-b9c6-22bceacf4ecc
+749,Russia,RU,Yurino,c5077154-e7e0-499e-a0cc-ffdcf5df28d0
+750,Greece,GR,Plomárion,d8fb6e3e-02da-4f30-953b-a4e26e17c7db
+751,Yemen,YE,Kushar,8fbb5f1d-1953-47a4-864d-5fec0f26437b
+752,Indonesia,ID,Lanta Timur,3690ec54-c836-4c39-9aa3-a06f7b79581e
+753,China,CN,Da’an,9aa5cfdf-15b5-4525-8f9e-34549903c6af
+754,China,CN,Beigang,8d4238f8-597a-45e2-b65a-0b2801e705da
+755,China,CN,Liutang,a20821e0-065d-4e8d-a63f-358ae2158e82
+756,Canada,CA,Amherstburg,784a2961-1834-4b20-adbb-8bf5a9b594ec
+757,France,FR,Strasbourg,56bc08bf-7f06-497e-a4af-8a782fd0ad6e
+758,Belarus,BY,Prawdzinski,12bbb7c5-ace1-4ca6-9cb8-3574546cda9c
+759,Indonesia,ID,Krajan Tengah,099069ea-8cf3-462c-88ec-91dbe570b9a6
+760,Greece,GR,Anávra,46d05c52-8ea5-4c9c-a93f-be77854e1b83
+761,Sweden,SE,Oxelösund,07d91897-9b61-4d4f-b305-42167b5651d2
+762,Netherlands,NL,Veghel,0fa2c978-2fdb-4902-8c73-2211623f5520
+763,China,CN,Jingxin,44c7ee62-d5c2-4ee4-a5cd-439aed706ffa
+764,Greece,GR,Pappádos,91bfda3b-b531-4ff8-98a3-53d89f62155e
+765,Thailand,TH,Phuket,f0fc7960-d8fc-409e-bac4-8b75aaaadff3
+766,Serbia,RS,Aradac,8cb479d7-98dd-4de9-9c6c-0234bd51461a
+767,Finland,FI,Kontiolahti,bb97221a-efa9-4007-a605-90e413083392
+768,China,CN,Jiancheng,1ea2aced-5a70-4da6-bef3-26d988aae9c7
+769,China,CN,Hanjia,07befcc7-ee29-4fd2-8d0e-1eac7a4467a7
+770,Indonesia,ID,Gunungsari,f75fc9bf-77e9-49c1-bd6b-06a38c03f899
+771,Indonesia,ID,Lhokkruet,12e4bfde-5de2-4956-af0f-38d7686f7576
+772,China,CN,Anren Chengguanzhen,4b448e1b-0d67-489a-ba5b-281e79ffcdef
+773,Philippines,PH,Tawala,7f6937a6-2753-4f45-a67c-14cf6e9d22e6
+774,Sweden,SE,Boliden,b0e64b6f-02bb-40a1-b876-5119c46fdbf5
+775,China,CN,Hadabei,1ae3d777-bb8d-4b41-a8d2-7974996a115b
+776,China,CN,Baisha,cf68b27e-938d-4779-9e2e-a377e0050ea4
+777,Vietnam,VN,Bình Thủy,bfbfc64d-bfd1-495c-971c-6974873ff986
+778,North Korea,KP,Sŏnbong,d59c5af8-d8cb-4b17-a983-36a6e0d54938
+779,Colombia,CO,Mompós,c0e6444b-3d13-4699-bae0-438923666bcc
+780,Brazil,BR,Humaitá,093f3da3-0a15-4ff8-90ed-ca0c7b00a5fa
+781,Philippines,PH,Kinalansan,865d08f1-5a6d-441b-98d4-492c39d1799d
+782,Thailand,TH,Lom Sak,2266ef82-c794-4436-bc67-1ad268c4f2ab
+783,Indonesia,ID,Lohayong,9e2d1e95-7537-42a7-8d05-44c59dcad2a9
+784,Brazil,BR,Tabatinga,c9aa0b1f-20bd-4435-9fb1-aae9103b89ff
+785,Sweden,SE,Gävle,0bbbd73b-eb06-4079-a29b-2e2434422029
+786,Latvia,LV,Ķegums,821430c8-0e30-4c39-8dfc-2be5a9226f58
+787,Indonesia,ID,Curug,8411c864-a369-4176-9cec-d5129286368c
+788,China,CN,Sanhe,e0cb8250-758d-41c2-9bac-389240babdf0
+789,Laos,LA,Ban Nahin,fe7a5c81-fe52-4bc3-9302-e4bba87e8d50
+790,Russia,RU,Sokol’skoye,d8ea506a-0006-44a3-a954-a1378328a03a
+791,Colombia,CO,Linares,6446cb4f-b257-4da5-9820-fe455a3196a9
+792,China,CN,Eshan,f3aed9ed-9963-4a3c-ac06-8548b7464dc2
+793,China,CN,Lutou,0a376c28-f7be-41ed-8051-b388800c8658
+794,China,CN,Xinxing,2ac60e92-920a-4641-bc1e-b82773a26104
+795,China,CN,Xintang,446b5b3b-4c0d-4aa8-9d04-d431292cda9d
+796,Indonesia,ID,Wonotirto,37c5b006-1c33-4294-aee0-a8cddaee202f
+797,Syria,SY,Sulūk,dd02fbbd-f233-40a4-b41f-128a66a68dde
+798,South Africa,ZA,Prince Albert,4856cfe3-4805-4d82-a785-4c264f6115c9
+799,Poland,PL,Kolsko,c212de34-30b7-4118-b486-3ee6b6703253
+800,Ireland,IE,Listowel,79c3e93c-0532-4b01-8f46-b40b97806919
+801,China,CN,Changyi,bf6d639f-a90a-41c7-a0b0-9d6f28f03185
+802,Dominican Republic,DO,Laguna Salada,81474c0c-c4fa-49a9-ada5-45deb2171d98
+803,France,FR,Orléans,e67a6b26-2835-4d43-90aa-061e5a60ad99
+804,Argentina,AR,General La Madrid,1404c81c-77d3-44c0-ac83-926d70e5ca8a
+805,France,FR,Vannes,3946c8d4-55b8-4415-841c-04ea7c96ec02
+806,Sweden,SE,Uppsala,62b3e92f-90da-48e0-996b-1fc5e6982626
+807,China,CN,Xuebu,fb2ccee9-c0fd-4795-bdf6-c87ab9fedef9
+808,France,FR,Argentan,47ec8a70-fec8-4a5c-814e-929186bddc76
+809,Portugal,PT,Luz de Tavira,c02131a2-cc87-46b7-83d3-171f0c177336
+810,Philippines,PH,Borbon,02bc4509-98b7-4957-8ce8-df9bc92e0094
+811,Poland,PL,Ryglice,194ad6e9-4f69-4076-b451-f0aa7a959810
+812,Bosnia and Herzegovina,BA,Karadaglije,71dcf4d3-23d0-4f7e-a8f7-714f2e3edc41
+813,China,CN,Xinan,e8d24b84-32e4-40f6-9139-04a2998aa849
+814,China,CN,Hefei,b3ff8f20-f47f-4b4a-ad38-d9861ac0a699
+815,China,CN,Yulin,2f1a2c8b-cd4c-4c14-bbb0-8876c7b7b309
+816,Iran,IR,Khalīlābād,1825ef35-53cb-46ae-8a34-e6bd720738fd
+817,Russia,RU,Koygorodok,2922d36b-c2d5-4817-a537-7802e89d2281
+818,Liechtenstein,LI,Schellenberg,d1bc142e-d35f-4175-867c-4fd07f145e59
+819,Uganda,UG,Wobulenzi,40840159-ab73-4cfb-8f40-af4e741d7ab9
+820,Jamaica,JM,Ewarton,d6bf768e-c311-4b87-ad9d-80bfbac9e8be
+821,Indonesia,ID,Karangpapak,5753c69d-f22e-4144-9a9c-da4f068964f2
+822,Germany,DE,Berlin,c5b24e86-571c-417f-9c9b-a1096c991b1b
+823,Russia,RU,Okhotsk,1acd70f0-77cf-4526-a441-dd67e721a88c
+824,Democratic Republic of the Congo,CD,Libenge,382596d8-64c0-4827-949b-2c2bd3a878db
+825,Indonesia,ID,Mojoroto,f9ca991f-ba69-4c69-a98e-a595859f4b53
+826,Mexico,MX,Guadalupe,b5168090-b2e2-43b9-880c-19ea77aaef19
+827,Ukraine,UA,Hlyboka,d54a81ce-b802-4a00-bb6a-b5aa55acda8a
+828,Finland,FI,Pyhäjoki,c226ebcc-f48e-471b-8fe0-7c81ef283f4f
+829,Serbia,RS,Bački Breg,3fd54aac-14ed-46a0-8cb1-f1c785357fc4
+830,Philippines,PH,Merida,02bfd70d-4f5d-497b-9a18-d74214972507
+831,Palestinian Territory,PS,Ţūbās,5c6bae05-1f9a-4fba-b3a9-ff394f488e3f
+832,Argentina,AR,Montecarlo,47df9366-3eca-46e7-b21a-12fbf5860e4f
+833,China,CN,Tanjiaqiao,8574baf5-ed72-4f54-9574-b98f6c972072
+834,Cyprus,CY,Erími,bfda76e5-84b8-44b4-b74f-7144658d4fcd
+835,Palestinian Territory,PS,Al Buq‘ah,971ffdcd-e193-42bf-98b0-8243a1cb3f8a
+836,Brazil,BR,Coronel Vivida,68dbc701-324f-42c0-bcf9-6583ec9c3a55
+837,Malta,MT,Marsaxlokk,bc0d35f6-71fe-4552-86fd-894ef10b98e5
+838,China,CN,Chengbei,16913ec0-b7b6-4392-8120-6c96328e81ce
+839,Indonesia,ID,Sumberbakti,d197af35-6408-4ba2-bc0e-a5b762ac485a
+840,China,CN,Huangbei,c1503607-b1df-4162-83a1-b279ab4feb44
+841,United States,US,Chicago,c7192000-32de-447f-8656-5047d2639691
+842,Ireland,IE,Gorey,49604f29-e671-451d-8dd1-4bd3bef5f6c7
+843,China,CN,Qagan Obo,4ebf4ec9-c462-42a7-b5d4-e53b586d38a2
+844,Brazil,BR,Cacequi,0d46ac14-5294-4113-b955-1d5b09e049f8
+845,Mexico,MX,Venustiano Carranza,ed4330b4-699e-4ba7-aff7-07a537324758
+846,Haiti,HT,Belle-Anse,95229dc2-82d3-4469-8747-7dcb691d9004
+847,Honduras,HN,Santa Rosa de Aguán,7a73cd2f-12c0-4106-9ffa-56c8d580aa8d
+848,China,CN,Sanlei,1e12d8e6-3306-4503-912c-e59541d5682a
+849,Bosnia and Herzegovina,BA,Kalenderovci Donji,2bc84303-7c7d-4518-aadb-e0dda8a7c11d
+850,China,CN,Changfeng,ac141f04-dccc-4756-8939-2a2bbdc28681
+851,Venezuela,VE,Aguasay,8bb7991c-2985-490a-8eb3-7df24087adb7
+852,United States,US,Las Vegas,42abd74f-3b9f-4bd8-94d2-29f13a347756
+853,Portugal,PT,Azueira,5e7f128d-d3c5-4b6f-8831-d34a04afed90
+854,Canada,CA,Whitehorse,d6098bdb-f71c-4c0d-8798-1d444908e9fd
+855,Liechtenstein,LI,Mauren,09860ed6-b2fc-429b-90c3-987207c603de
+856,Brazil,BR,Janaúba,d5c4c285-b162-4f0d-9a10-15185cc70daa
+857,Venezuela,VE,Barbacoas,ca1535a1-2d59-4022-a092-e20811d553d8
+858,Montenegro,ME,Ulcinj,572c3591-2851-49b6-bb5f-24a304e64876
+859,Indonesia,ID,Lengkongsari,1f731cc1-4891-4e2e-a601-101b485803d5
+860,China,CN,Juren,96d6ba84-18a4-4d70-9a76-ec250b4e9d8f
+861,Bulgaria,BG,Isperikh,76b6051a-666a-4c6c-92fc-6942ac057f78
+862,China,CN,Wujiashan,ccb10346-2207-4efb-8c47-8a7e7186999c
+863,Philippines,PH,Malilipot,f67381a4-3acf-4d41-81be-c2d034659f08
+864,United States,US,Pittsburgh,786298e5-268a-47d9-8540-8e013e901b74
+865,Philippines,PH,Guinticgan,fd31812f-da4b-48ee-951d-c1bc702d8897
+866,Nigeria,NG,Ipoti,33cfeec5-4501-4969-9779-cbef2b012d05
+867,China,CN,Wutan,8f9eb184-647a-4bbf-8f3d-ceaedf38cc64
+868,Poland,PL,Wasilków,dfd7b2ac-69ac-4943-9bb6-7ce0f97c0ea9
+869,Argentina,AR,Tinogasta,fc15d64d-70a8-4b02-ac2d-676a3e139c4c
+870,Tunisia,TN,Al Qarmadah,cd4f0225-6982-4e35-acaa-be45f90c9b31
+871,Bulgaria,BG,Zlataritsa,0cd35f35-f68b-4005-a775-88e1a04ddd8c
+872,Iran,IR,Manūjān,54000526-5e46-4e69-8fc6-18ada0cca5a7
+873,Bangladesh,BD,Maulavi Bāzār,e491f485-c97e-4185-8353-2dede4586be1
+874,Bulgaria,BG,Vratsa,407238bf-f6a1-4482-891d-d236d157c012
+875,Thailand,TH,Wang Chan,703b7a4f-3b9c-4c7a-9ace-442d2422f1b2
+876,China,CN,Shimen,ab7a39e7-f339-414f-8c0a-cb1fdb0f7316
+877,Albania,AL,Fier-Çifçi,d6bdf894-7fe3-42a7-b025-25fa5d6d032f
+878,China,CN,Hengdian,95d31630-c879-46ff-ba60-02df5ce7037b
+879,China,CN,Muye,091ff43a-798f-4369-8405-b2efb4da710b
+880,Bolivia,BO,Atocha,dcbc7318-53bb-438f-82f6-0acac17a583b
+881,Japan,JP,Asahikawa,5fe0dc98-23ec-4548-93fd-96db90c289c2
+882,Philippines,PH,Ambulong,fc380899-5f1c-4520-bc96-9c69055f25cc
+883,Chad,TD,Massaguet,566af41f-e30e-408e-aaf2-79487cc207f5
+884,Ukraine,UA,Kolodenka,1dfdb853-15ee-4439-a55f-f011d3b81543
+885,Canada,CA,Cache Creek,6b899ad2-a99c-45aa-8b28-e639763a8c7f
+886,France,FR,Hénin-Beaumont,9f4546de-2a6f-4bf5-a2f7-8ec78db617ba
+887,Poland,PL,Kaliska,e8e27ad5-5537-4140-8510-052b035d0c56
+888,China,CN,Zhendeqiao,4001ded9-9746-4a85-863b-b70e13d59083
+889,Philippines,PH,Longos,67614d2a-154e-4bd5-a107-a13549cf14d1
+890,France,FR,Versailles,54aeea97-53e9-4563-aa24-f700f7b3b58e
+891,China,CN,Zhamog,bb85f82c-cc13-4923-ac7f-5319fb4b132b
+892,Japan,JP,Hiroshima-shi,30abb99d-1890-44e2-8336-9f43aa56a535
+893,China,CN,Tuanshansi,9d352b56-7e98-41cb-9af2-772b54d9735d
+894,France,FR,Paris 15,5757bdb7-a48a-4e10-80f7-93e7c7d30e9d
+895,Indonesia,ID,Kalisari,ed55209d-a846-4723-bb30-d7b745eb6b80
+896,Czech Republic,CZ,Dobratice,52f7e206-2587-41d6-8291-82c9141554c9
+897,Indonesia,ID,Perbaungan,e89bc012-c3d6-4fa0-b62a-c938a926a210
+898,Brazil,BR,Gurupi,490db20e-17fe-47f0-975a-2ffa23fd2aa0
+899,Sweden,SE,Borås,ddef263c-ec79-4aa4-9f38-24fb16b213ea
+900,Japan,JP,Kitahiroshima,237b5034-5922-4b04-aa27-5b2a38719242
+901,Indonesia,ID,Mukun,e283b05d-6bb4-4e99-bd3a-3ebc5f118f2d
+902,Indonesia,ID,Pante Raja,435522d9-8361-4bfd-aa4f-f75f0e0a453a
+903,Croatia,HR,Karlobag,18bedfc8-bf07-4530-ad7b-4fde655373f9
+904,Czech Republic,CZ,Hostomice,0028c3ab-c7d2-494d-ba10-4f84ed588db3
+905,Palestinian Territory,PS,Kharbathā Banī Ḩārith,a9b20721-8e32-4ef1-868f-620f2b95a6d0
+906,Australia,AU,Sydney,eab8d9f0-3a6a-495c-af51-19f09b67ec2b
+907,Peru,PE,Ocuviri,976fce60-058a-4a4b-8782-273fd63aa5f5
+908,Mauritius,MU,Triolet,bd4f77a9-255d-4cef-b60b-2194479bfe5b
+909,Czech Republic,CZ,Sadská,0cca0157-2a85-44d7-8fb2-f75ca0e8b343
+910,China,CN,Zhuping,1cef44e9-54f2-45f8-b4d0-b509007121be
+911,China,CN,Gaoqiu,cde46f56-c0ef-432e-a088-2150086840ef
+912,Cuba,CU,Camajuaní,f1faa3e5-a907-4389-a9c1-cb9f4a416b67
+913,China,CN,Ma’an,498f93db-f0dc-4343-b596-0c4d8f85c5b2
+914,Spain,ES,Salamanca,3cbd494f-f3e2-4354-b224-9fd977b82847
+915,Sweden,SE,Örebro,0d1f066c-e027-4b53-8e71-2aab60d56af3
+916,Brazil,BR,Mateus Leme,8aa8f27c-34b7-49ac-a186-eb3451ae9199
+917,Netherlands,NL,Heemskerk,6f9ae698-9cc0-40a1-909e-62a66d2ede80
+918,Ireland,IE,Enniskerry,bafac223-81e0-4cf0-b773-7d4ddc0ccb1d
+919,South Korea,KR,Goyang-si,7e41b9da-3ece-4be0-9a0e-f87a25cd62e9
+920,Philippines,PH,San Vicente,6b8b4150-61c3-403f-80fa-161784ebfebd
+921,China,CN,Youchou,fdecb690-38c1-433d-a298-3eacd38fc254
+922,Russia,RU,Debesy,20d2f8d5-7c70-4c0c-a5fb-d92b08103abc
+923,Philippines,PH,Santa Rita,f249bbb5-13b6-4b3c-aaf1-10cdcb224563
+924,Mexico,MX,El Tejocote,40cc373b-3a1e-45fa-9ed4-11b554b099ce
+925,Indonesia,ID,Detupia,ccb40fbf-4227-455e-bb24-4928316356aa
+926,China,CN,Damaying,c9153055-759c-4407-8381-d035dc04f844
+927,Argentina,AR,Dolavón,126d36c5-f0b4-4106-841a-5d3ec6769b95
+928,Poland,PL,Czarnożyły,5e59e224-ff9a-4887-b5c8-42917e4e2776
+929,Poland,PL,Zebrzydowice,e0082c94-b956-414d-8e9b-cc4ee2eaf5d3
+930,Tajikistan,TJ,Vakhsh,1cfe2d35-6d73-4b77-a9b5-0675f8fdcf2c
+931,Indonesia,ID,Puncaksari,a06a5c22-1211-43d4-a986-73c03580b3be
+932,Czech Republic,CZ,Višňova,cf679383-4b90-448b-8878-433633a50104
+933,Chad,TD,Bitkine,9e83a0fd-22c7-4420-abab-f7fddfd5a4eb
+934,Japan,JP,Yūki,6db1c8af-325e-43cd-8e18-dab4bd5db1b3
+935,China,CN,Qifang,77a3ec79-1cb9-401c-bb03-123e021f6ca4
+936,Nicaragua,NI,Comalapa,8a6144ae-6edf-4450-acf0-22bd63118f88
+937,Honduras,HN,El Plan,b05655a3-5207-4cec-ae54-56c404bca778
+938,Russia,RU,Vyaz’ma,3df86404-a4d8-4a81-910a-03ef4eacdc2b
+939,Netherlands,NL,Lelystad,64a536e1-0c4b-4b38-83ef-e82e34f55937
+940,Russia,RU,Markovo,d1d0be4c-90f3-4f1e-b7c4-9b740b62e347
+941,France,FR,Lyon,17c1a7d3-e108-4ffc-94dc-275528fd629a
+942,Philippines,PH,Liloan,e0d381af-cdd7-47b1-b3f1-fe2ba45d41db
+943,Japan,JP,Itsukaichi,0caeac18-ae3e-4110-af3c-58d3a0cf324e
+944,Czech Republic,CZ,Poříčí nad Sázavou,19fdbc06-b7a6-417a-b708-e7e0a17f63df
+945,Indonesia,ID,Cungkal,6020edae-1927-412d-bd0d-0e4eb28ac938
+946,Mexico,MX,San Francisco,3c84f17c-be9a-40e0-aaf6-e7f1d3334503
+947,Cameroon,CM,Wum,0c54b474-8c62-46ac-98eb-6bfd002e76fa
+948,Russia,RU,Donskoye,d4a6421d-1ed2-4497-8dfd-f6b7f0c1a263
+949,China,CN,Huyuan,2e00e100-fbfe-4d96-b868-08ef0f2d7a0f
+950,Cambodia,KH,Smach Mean Chey,fb858ce2-60d8-4d7b-8cf1-77ac841e5233
+951,China,CN,Yima,bf3a1265-cf9d-4457-8e7a-396ab3713c25
+952,China,CN,Huangbei,e89c1575-2a79-452e-beb4-028bac8d0133
+953,Paraguay,PY,Colonia Minga Porá,4e109bd7-5df7-40fa-9bb9-6a3c8133afa9
+954,Portugal,PT,Nelas,df255160-5148-466f-a4d0-3c01570607cb
+955,Indonesia,ID,Kedungreja,0dfbfd94-2fb3-4c79-9eac-499186aea967
+956,Sweden,SE,Bromma,fcc537b6-4020-4b07-8e89-3f1c0de9dd98
+957,Czech Republic,CZ,Břasy,f2426c0e-68c1-43cd-a199-f2bcced53af8
+958,Nigeria,NG,Wudil,a7a50fd0-0819-4249-bc84-80813603fa61
+959,Indonesia,ID,Panimbang,83112da1-2a4b-47c3-a2bd-dfa3ca1dcf57
+960,Indonesia,ID,Sentani,921d7b92-8c7e-4531-b45a-7086e7930027
+961,China,CN,Bahe,ce01df25-2be2-403e-b195-0bf0724ab2f1
+962,Pakistan,PK,Pahārpur,92ffa1d7-aaba-4df4-9e9e-6a7bab2fb39a
+963,Peru,PE,Turpo,5d61e5f2-27f0-42aa-82ae-d48def6941b3
+964,Poland,PL,Żarki-Letnisko,3b332f22-e1a2-4eb9-94fc-64c9bd6848ef
+965,Afghanistan,AF,Ḩāfiz̧ Moghul,36e26ddc-4c17-4b28-968c-c798cc5b3f18
+966,France,FR,Marseille,0d8c4a73-49a1-49a1-b406-a6dbd3e331db
+967,Indonesia,ID,Radamata,a9ea4a1e-8231-4d63-a776-24f2f01ac7c2
+968,Poland,PL,Sączów,9ad238a5-55d2-4d99-8245-30fb862a28ec
+969,Indonesia,ID,Pasonobenu,e7817e61-ae1d-4b3e-ba0c-f2e25c47b754
+970,Russia,RU,Ryazhsk,c669dbef-25fa-4622-bd67-6736b7167c27
+971,China,CN,Ludu,1af60799-cb11-4881-b615-8ba5b606fa14
+972,Syria,SY,Şabbūrah,f537a8af-29fc-436d-969e-1c4f907c4f93
+973,Niger,NE,Tanout,6715e47c-35e8-4037-b7aa-e97a4fd20710
+974,Philippines,PH,Boston,b3ca31bd-45fc-48f3-adb7-276752f59f67
+975,Uganda,UG,Kyankwanzi,a01a4d98-4023-465f-85f5-9ab3e30defcb
+976,Iran,IR,Javānrūd,847aec1b-f7f1-417c-adb1-79232b9386ea
+977,Colombia,CO,Guacarí,fb10f72e-9a26-44a4-9646-f929e27a10c0
+978,United States,US,Wilmington,8338745f-bfef-42cf-9c04-14ff4992e8b7
+979,China,CN,Qingu,9397b124-17b0-4406-aef8-79568bc5c109
+980,China,CN,Jiang’an,33ef9e9c-300e-4a82-920e-b6d725d119a7
+981,Laos,LA,Muang Long,ce561cd4-e9ab-4cb6-9d17-9b9c23691cec
+982,Paraguay,PY,Carayaó,22652b4e-69ea-4a84-a0e3-5dcf99cd79ea
+983,Poland,PL,Wilkowice,833162e9-697b-4812-8d39-54854e6effe3
+984,Ukraine,UA,Vin’kivtsi,d2870604-e6d2-449c-be37-867ae2126f91
+985,China,CN,Ni’ao,04657859-17f2-4f17-b9a4-30e71aada1a6
+986,Iceland,IS,Seltjarnarnes,b70344b5-dc13-4f6e-8c2f-49f61fb918c1
+987,Macedonia,MK,Delcevo,7ac1ea08-4d9d-4fd7-9058-882a48bb1552
+988,Peru,PE,Masma,400087c3-1b37-4e6d-8fdf-851ac6f72594
+989,Russia,RU,Sim,b3b7292a-8753-4bbc-b034-f5f699fd8f2d
+990,Sweden,SE,Timrå,2e77f824-fcfc-47e1-99c4-a6d96de002e6
+991,Cyprus,CY,Ergates,aa94136b-5d85-48d2-b68c-f4cc8858570b
+992,Russia,RU,Rublëvo,14856105-e04c-46f7-acaa-f7982fc2f501
+993,Indonesia,ID,Lewo,364ea95d-ee79-48ce-9fbc-31bc2b52e614
+994,Ukraine,UA,Skalat,96bfcd89-0fdd-4e1e-b1ca-79fecc79cf00
+995,Myanmar,MM,Shwebo,01fe68e3-0e3a-4d68-8f2c-72c969db74fc
+996,Canada,CA,Richibucto,ff251dfe-57f7-464e-8772-5f8459e151c7
+997,Brazil,BR,Serrinha,c3cbe3be-f9b8-446d-ac61-b6f048492acb
+998,Belarus,BY,Il’ya,29992d97-c601-45cd-a83c-2ddd8a58e751
+999,Moldova,MD,Cahul,d2a3440d-8c91-4e65-a74b-a90944a7033f
+1000,Kosovo,XK,Pagaruša,74544495-29ea-40ea-b400-94c6a019572c

+ 1001 - 0
Masuit.LuceneEFCore.SearchEngine.Test/Helpers/TestData/MOCK_USERS.csv

@@ -0,0 +1,1001 @@
+Id,FirstName,Surname,Email,IndexId,JobTitle
+1,Gloria,Hudson,[email protected],9b5ee536-de8f-4725-8550-635c41b9a7bc,Desktop Support Technician
+2,Justin,Gray,[email protected],fad4f5f7-5758-4cc0-be06-ceb7508d4af1,Occupational Therapist
+3,Theresa,Clark,[email protected],84ad1d11-a45e-4274-85be-5fc5fd769a10,Project Manager
+4,Michael,Nguyen,[email protected],21a45140-4fe2-49ce-b36e-403dc7e2db9e,Senior Sales Associate
+5,Harold,Miller,[email protected],5b1540ed-51a0-422b-86b7-a28960b2860c,General Manager
+6,Daniel,Lewis,[email protected],c3231dd3-feb1-4eff-8b75-7f892e9f1068,Office Assistant I
+7,Harry,Sanchez,[email protected],9ce9d20b-f7a5-4196-9956-e466c38fca76,Assistant Manager
+8,Rebecca,Martinez,[email protected],c027ea8f-69c8-4a9d-9b13-8ce35cb31e7e,Food Chemist
+9,Dennis,Anderson,[email protected],7537515a-4977-4d6b-b67a-49533cb13efe,Account Coordinator
+10,Rachel,Butler,[email protected],6ac939ff-773f-4e83-ab07-d3f17782f8e8,Quality Control Specialist
+11,Marie,Griffin,[email protected],1b707a24-c93e-4ab6-abb1-f6ea4aab83ef,Account Executive
+12,Mildred,Turner,[email protected],de4bedea-c923-4f51-ae5f-bae360030052,Human Resources Manager
+13,Jeremy,Burns,[email protected],c83d55f8-d381-41c8-98cb-ad233deb8f3c,Senior Developer
+14,Daniel,Duncan,[email protected],66c1a055-4a9b-4ce0-865c-3b971f2dac39,Help Desk Technician
+15,Jeremy,Thompson,[email protected],ac0e0eed-c577-460a-9508-0177ca22d8ca,Information Systems Manager
+16,Roger,Olson,[email protected],27dca47c-bc99-42ff-a56a-2cb6ab135063,Sales Associate
+17,Paul,Arnold,[email protected],870caa12-203e-4823-8ba9-250c9dc2c65c,GIS Technical Architect
+18,Jeffrey,West,[email protected],2661662f-1f45-467b-bf9e-8e79c82a129d,Staff Accountant IV
+19,Donald,Peters,[email protected],40ade2b9-8d4f-4661-8ec8-e6e26fd16ad4,Clinical Specialist
+20,Judy,Fisher,[email protected],c5d80060-e453-40fa-b21e-189d3ad35d07,Community Outreach Specialist
+21,Katherine,Moore,[email protected],5efb5076-9d96-4829-80cb-c63176fdfaf5,Research Assistant II
+22,Phillip,Harvey,[email protected],cd2bf6de-4224-40fa-a3d0-2700a84a6d38,Assistant Manager
+23,Andrew,Butler,[email protected],11f2e3f1-7b6d-419c-9e66-263b91ea486b,Marketing Assistant
+24,Catherine,Anderson,[email protected],25ec3c6a-9ef1-4aec-9861-45fde40a350b,Director of Sales
+25,Sarah,Spencer,[email protected],8820c311-ae08-44f6-8016-4bdb0ef794b4,Project Manager
+26,Nicholas,Henry,[email protected],cfd61b6e-f3e5-4123-a47b-8cc3bcaa7bff,Operator
+27,Justin,Perez,[email protected],e90d3a37-eff4-4e25-a5bf-d50a3ca8fc4d,Office Assistant II
+28,Alice,Bradley,[email protected],254ad389-6479-40fd-872f-2748076e276f,Design Engineer
+29,Frank,Hudson,[email protected],8d7b777f-8a78-48e6-9317-765ff54d22fc,Structural Analysis Engineer
+30,Sara,Kelly,[email protected],4410eab0-1d98-4f69-9f77-bf1b6a4731a5,Tax Accountant
+31,Richard,Kelly,[email protected],30df6166-5d8e-4259-a4a9-813fb930ea56,Occupational Therapist
+32,William,James,[email protected],3f85e4ed-a142-49b4-b659-020d9c4389fe,Statistician II
+33,Ryan,Baker,[email protected],c3d5bb39-5001-4b37-b6fc-686fbe39d489,Accountant IV
+34,Scott,Harris,[email protected],5b660edd-459d-49de-be1f-68b6cfadd85d,Database Administrator III
+35,Donna,Palmer,[email protected],6bf34b95-61f3-44aa-bd59-b74e3cbd735c,Computer Systems Analyst I
+36,Kenneth,Edwards,[email protected],f89e193f-8b32-45f6-a88d-a281712ff52f,Software Engineer II
+37,Carol,Rodriguez,[email protected],64e08f0a-95c7-4ab2-b594-26f43fb509ac,Librarian
+38,Todd,Morrison,[email protected],52c16d75-a68f-4e50-b36a-3e32548db676,Occupational Therapist
+39,Roger,Hughes,[email protected],a9e1e2ea-a403-4c58-a2ea-7be566da1448,Recruiting Manager
+40,Ruby,Allen,[email protected],9829c518-506d-4ec3-a45b-9a85f21c425e,Programmer Analyst I
+41,Michelle,Harris,[email protected],b27ee932-a05f-4b1d-bfa5-93f0e2abaa5d,Media Manager III
+42,Kathleen,Ramos,[email protected],e63f5813-9607-4692-aea9-03c5df2813f0,Assistant Professor
+43,Alan,Foster,[email protected],1925c8ea-9e5a-431b-8c8f-a8e92d761f7f,Actuary
+44,Amy,Reid,[email protected],c7652dd5-5aa3-4e4e-9052-bc7cc72752e0,Biostatistician II
+45,Donna,Shaw,[email protected],a58b66ec-a096-44ba-bf82-cafc8aadbc0c,Cost Accountant
+46,Roy,Russell,[email protected],44133bac-f76e-44fc-babb-5b5fe2c28480,Cost Accountant
+47,Henry,Rodriguez,[email protected],ce7d99ae-446b-4378-91c7-6eda5045d030,Tax Accountant
+48,Matthew,Fields,[email protected],958ab4a7-da4b-4e77-896b-5737347c8dc2,Accounting Assistant IV
+49,Jennifer,Ramos,[email protected],fd8fc549-1b88-46d2-a302-f13b5c540749,Statistician III
+50,Nicole,Watkins,[email protected],198febde-51c2-412d-8faf-abe7c36d6fa8,Associate Professor
+51,Jeffrey,Shaw,[email protected],82a87e31-7ae9-4e9f-9212-5f9db19c87f6,VP Quality Control
+52,Carl,Gomez,[email protected],ed257f59-0516-49a6-b2b0-4f6e005b98da,Internal Auditor
+53,Donald,Mendoza,[email protected],d46048f8-12c9-4cff-81d9-de975f741ba3,VP Sales
+54,Gary,Burns,[email protected],d8d7b3e7-3a42-4446-9634-3d6c8d83bfa3,Business Systems Development Analyst
+55,Carl,Cook,[email protected],b75a6eef-1008-4cb4-92f2-009fa2eb4ed6,VP Marketing
+56,Rebecca,Hughes,[email protected],42c484a2-9051-436f-ba47-76eb392afad9,Senior Sales Associate
+57,Wayne,Austin,[email protected],8c0a317f-014a-4da4-80c5-e54c01ea65a2,VP Accounting
+58,Wanda,Matthews,[email protected],14b84700-7e1b-4a51-b8bf-44798b2184d3,Geological Engineer
+59,Nicholas,Ray,[email protected],670889a6-68fd-4a7b-a2cd-1a451863677a,Editor
+60,Mildred,Gonzalez,[email protected],4a1addd5-9765-4f24-a395-943eae6ffdab,Assistant Manager
+61,Jennifer,Mason,[email protected],3e9bcd2f-9f97-4579-9a3e-68d9ae146a22,Legal Assistant
+62,Donald,Richards,[email protected],0fe45526-d79b-43a0-88c5-a3ee5a113c8c,Nuclear Power Engineer
+63,Scott,Phillips,[email protected],c0a5a58d-2fdc-490d-96c2-0c47ab862906,Environmental Specialist
+64,Jeremy,Turner,[email protected],988465ef-4a2f-4f00-a88e-c5cc12c9708b,Civil Engineer
+65,Barbara,Frazier,[email protected],c1f25870-7875-4609-9870-90d4cf7ddf1f,Administrative Assistant I
+66,Doris,Watkins,[email protected],2a5948eb-0c01-4070-945f-5ecf79bc74ff,Business Systems Development Analyst
+67,Carolyn,Murray,[email protected],fe50eba6-7d5f-4158-8205-b752365b0135,Senior Sales Associate
+68,Ruth,Richardson,[email protected],c9f62af7-aa2a-443c-9a47-73ec51e4e2e4,Health Coach IV
+69,Nicholas,Fox,[email protected],9b0eaa70-27d4-434c-885e-d86ef8c2e573,Nurse
+70,Nicole,Chavez,[email protected],1ab48664-6468-44a1-aa35-9888056ba39e,Accountant III
+71,Kimberly,Ortiz,[email protected],765ae438-7483-40e6-9475-12a8ca4fdbdf,Software Engineer III
+72,Sarah,Hamilton,[email protected],476553e4-df61-4875-a1c8-abef5acab910,Web Developer II
+73,Peter,Dean,[email protected],3f953fd3-1309-447b-8aa0-bb410acc2472,Geologist II
+74,Diana,Jones,[email protected],14b85ddc-9808-4c37-9d45-4a184d7c62e1,Accountant III
+75,Donna,Daniels,[email protected],097734f7-ffe5-47f0-afe7-880c6ccef6c7,Account Coordinator
+76,Jason,Ellis,[email protected],3cf75fa0-b167-4554-b6de-926743305b19,Internal Auditor
+77,Jack,Montgomery,[email protected],9a8a827d-a085-4583-adba-aa7a0be2556e,Cost Accountant
+78,Kenneth,Barnes,[email protected],c1eaec3e-2abd-41f4-9fb8-7b7c938f99da,Computer Systems Analyst II
+79,Michael,Burton,[email protected],c3b22201-68c3-4d53-b05f-88a674c53bc8,Biostatistician II
+80,Ruby,Riley,[email protected],5869b197-bce1-4d76-87bb-1c5e0e20feef,Quality Engineer
+81,Charles,Clark,[email protected],9afa83da-bb27-4c3f-9ee9-a77c2bcccb09,Account Coordinator
+82,Walter,Bowman,[email protected],377dd5af-f6d0-4b39-8784-0b874cee9a3f,VP Quality Control
+83,Gerald,Boyd,[email protected],6a0e9499-3567-4da6-9d8f-8ccdfbefd3a5,Assistant Manager
+84,Nicholas,King,[email protected],16e4813d-c3f5-469f-af1c-332fe63cf146,Recruiting Manager
+85,Andrew,Henry,[email protected],00d63c61-9649-44e5-bb7a-3e914e44af91,Business Systems Development Analyst
+86,Deborah,Harris,[email protected],9ede8e19-bde3-4fd0-ad30-dee9c4289cbd,Project Manager
+87,Ernest,Schmidt,[email protected],afb8a53f-141d-4134-b988-5039abfab408,VP Sales
+88,Martha,Stevens,[email protected],36d04978-ace1-4b00-b167-17888f69aea9,Senior Developer
+89,Joe,Stephens,[email protected],47deb520-7f7a-48c1-9658-1dd01b50665d,VP Sales
+90,Debra,Reynolds,[email protected],db4dab12-3356-49de-ac88-0cb8b43eeca8,Senior Financial Analyst
+91,Patrick,Cox,[email protected],6d99455f-8747-4111-bfaa-293acbf0f816,Health Coach II
+92,Gloria,Williamson,[email protected],22c8fb89-8dd1-48bd-aebf-a4db3f93a2a0,Senior Quality Engineer
+93,Richard,Lewis,[email protected],fdd3aab8-a32c-494c-98f8-7cdc65aa992a,Help Desk Operator
+94,Dennis,Fernandez,[email protected],10f21f66-2ff5-4de2-8d13-44c55702bace,Civil Engineer
+95,Virginia,Williamson,[email protected],5a6b1348-d378-4117-a4bb-9eaf806e2c97,Editor
+96,Linda,Walker,[email protected],6694af6b-b4ab-41ba-91a8-25ade906da0f,Health Coach III
+97,Elizabeth,Porter,[email protected],ce4dd39d-3d82-4a70-a6eb-fe131b782463,Statistician IV
+98,Bruce,Collins,[email protected],13fb2f68-9195-461f-a09c-d7172545286d,Geologist II
+99,Frank,Hudson,[email protected],c3be0d03-6fc5-4bba-83ab-d4c707ad0c7e,Assistant Media Planner
+100,Michelle,Howard,[email protected],28cedb5e-9ede-42d9-92b9-9703585d0052,Senior Developer
+101,Kelly,Taylor,[email protected],a1754f6b-c4ef-440f-afba-24043dbcce4c,Help Desk Technician
+102,Timothy,Porter,[email protected],22aaeccb-6211-4634-bf9b-3fd46b409304,Developer I
+103,Samuel,Weaver,[email protected],bc4c292e-b004-4def-a58b-f6567f670698,Nuclear Power Engineer
+104,Stephen,Mccoy,[email protected],39c8ae04-4a87-4e42-b4bf-b418ccf3a425,Senior Financial Analyst
+105,Alan,Brown,[email protected],653cc282-3816-40f7-b8be-a2f12a1edb8e,Community Outreach Specialist
+106,Billy,Harrison,[email protected],70f59468-9452-4258-8f43-c72db52550d8,Accounting Assistant II
+107,Sean,Lawrence,[email protected],65d4385b-0e91-4451-bd4f-6ee841e248da,Nuclear Power Engineer
+108,Michael,Garza,[email protected],a5653e5d-4dd1-4050-ac83-ccb57ea1e5ac,Research Nurse
+109,Ruby,Schmidt,[email protected],e93c6d5d-1824-4088-bd61-5aba9b6ad227,Junior Executive
+110,Paul,Harris,[email protected],16c18984-7430-4268-b207-8cd84a1b2ce6,VP Sales
+111,Nicole,Stanley,[email protected],c1d151cd-ad6b-4396-bd6c-ae3b85b6021b,Food Chemist
+112,Thomas,Fuller,[email protected],0efee31d-111c-4898-ac3a-c648314aa2c9,Pharmacist
+113,William,Hughes,[email protected],0fd64072-aa19-451b-a6cd-db08eeb160d7,Tax Accountant
+114,Roger,Frazier,[email protected],ef63d257-019e-4d72-96fe-39a0b12be8b0,Physical Therapy Assistant
+115,Bobby,Reyes,[email protected],c92639e4-6702-4c21-bd20-c9aa222b0bfa,Administrative Officer
+116,Harold,Gordon,[email protected],2221b5f9-34cb-428d-b8ae-97c29aafdeef,Community Outreach Specialist
+117,Brandon,Howell,[email protected],b5f5460c-3e6d-4dad-9824-6725fb964a6f,Administrative Officer
+118,Frank,Gordon,[email protected],093956bb-ccaa-4c81-9636-bbbcd7dada20,VP Marketing
+119,Arthur,Fernandez,[email protected],e43e934e-750c-47bf-8d26-f29a913ee774,Product Engineer
+120,Chris,Lane,[email protected],9d562c1c-df65-4205-80f1-bd933c0caddd,Web Developer I
+121,Lisa,Gray,[email protected],26bc48e7-2afd-422e-9faf-3f4f954fe28f,Legal Assistant
+122,Melissa,Adams,[email protected],862d0d35-f6e7-4734-82ba-e9debb913de0,Information Systems Manager
+123,Donna,Fox,[email protected],341d25bc-63c6-4a61-978a-ece50967c55f,Graphic Designer
+124,Patricia,Dean,[email protected],fa75761a-b3f2-4bc0-b0bc-143303a6166c,Nurse
+125,Kimberly,Hayes,[email protected],260b4be0-35a8-4a67-b7c6-0a516644bd18,Editor
+126,Jessica,Torres,[email protected],ce034cc5-2591-4cbc-9cba-0ad4fcd1e912,Sales Associate
+127,Justin,Knight,[email protected],e8fd4593-74a1-41b2-919c-cc64f6b81eb5,Executive Secretary
+128,Anthony,Reyes,[email protected],d2851d6e-b214-4da6-8026-db632934e918,Developer I
+129,Janet,Moore,[email protected],79920e05-4478-4426-98d2-bdbd8ad00562,Environmental Tech
+130,Tammy,Greene,[email protected],bb9932ae-b763-428c-96e7-78bfcc63a683,Assistant Media Planner
+131,Albert,Adams,[email protected],f465c479-f5ea-4162-a610-1d612b1dfa6a,Staff Scientist
+132,Heather,Montgomery,[email protected],00b12371-55ac-48ce-9d8f-077b7adb8c1c,VP Marketing
+133,Aaron,James,[email protected],af667907-fe2f-4d4c-82d0-4eb7a9a45080,Nurse Practicioner
+134,Margaret,Weaver,[email protected],e63943e8-c55d-4d34-b2ad-c05838e2166a,Systems Administrator III
+135,Arthur,Wheeler,[email protected],a1033bc6-0dd4-4174-b1fc-4a7142f4f334,Research Associate
+136,Alan,Bennett,[email protected],9b85d8ee-ad8f-43fa-90f4-74b5b3ca4897,VP Marketing
+137,Kenneth,Medina,[email protected],c22b1d11-ac36-4eb3-acba-ff0942492e81,Biostatistician II
+138,Virginia,Hamilton,[email protected],56e6b00f-aebd-442f-bd28-5152d0fd4b53,Civil Engineer
+139,Rachel,Long,[email protected],e1305f74-6419-4fb7-958c-dfda9956660b,Nurse
+140,Eric,Evans,[email protected],d6fefcf4-ab32-403e-ba20-c02d9420a7cf,Chemical Engineer
+141,Todd,Sullivan,[email protected],d41f0e10-893d-4d5b-a590-79420d37542c,Professor
+142,Martha,Hunt,[email protected],c1467145-e80d-433b-85ab-4c20df888c56,VP Marketing
+143,Teresa,Rivera,[email protected],8e566430-72a8-44dd-b13c-0b6553af0f52,Social Worker
+144,Norma,Ray,[email protected],0909bcda-05c5-4510-8a19-114a49414875,Software Consultant
+145,Susan,Johnson,[email protected],562179a9-94f3-4657-929a-36da04a74f36,Computer Systems Analyst I
+146,Carl,Evans,[email protected],61d45a6f-941e-4430-b8ce-e3dbac903fc4,Technical Writer
+147,Laura,Bishop,[email protected],c9e3de31-e8d6-4a1e-afac-41ab99ea1d76,Junior Executive
+148,Norma,Turner,[email protected],7505d94d-d70a-4fba-b907-661ff2ae8291,Community Outreach Specialist
+149,Louis,Evans,[email protected],bb843ae0-23c9-4482-a065-ad69344fc6d7,Accountant II
+150,Thomas,Phillips,[email protected],3129ba67-9154-4cb6-9c40-fb66b9e74d03,Registered Nurse
+151,Roy,Rose,[email protected],8b29779f-eb22-4d45-90e8-342de1e79baf,Statistician II
+152,Jeffrey,Grant,[email protected],63f63b6d-a4ae-46c5-a5cb-cd795371c6ce,Payment Adjustment Coordinator
+153,Theresa,Andrews,[email protected],1ec0d813-0347-42f3-b7d5-9a938c4c010c,Developer I
+154,Bobby,Castillo,[email protected],ef9b94ce-fbd2-414c-a0e0-789022549765,Software Consultant
+155,Nancy,James,[email protected],61815b25-8d0e-46e1-8c0c-5ee34a59a12d,Physical Therapy Assistant
+156,Chris,Shaw,[email protected],840fc42a-8fb7-4b3a-9bca-aa766629aef5,Cost Accountant
+157,Willie,Riley,[email protected],55c57d73-2637-4678-a4be-a323146c309a,Payment Adjustment Coordinator
+158,Karen,Holmes,[email protected],7d70fed8-e903-4bc4-bf50-88d66bf9a1a0,Software Engineer I
+159,Theresa,Vasquez,[email protected],df6a5ef9-207e-4df8-9918-7338a416e637,Analog Circuit Design manager
+160,Mary,Gilbert,[email protected],5dbad63d-2d34-4909-ba07-3732cea93322,Statistician IV
+161,Joseph,Crawford,[email protected],23fb05d8-1a12-4b70-8b32-e59993b198ae,Registered Nurse
+162,Linda,Evans,[email protected],a21e021d-60ab-4d53-9449-f790506e790b,Director of Sales
+163,Andrew,Cox,[email protected],96867f47-a941-4f71-83ef-db76307f6d40,Recruiter
+164,Mary,Perez,[email protected],bd4b4df8-81b1-41e5-8aa2-ed403a267237,Assistant Manager
+165,Brian,Austin,[email protected],f18a1859-1ece-4650-bd48-4b45d9a18a6b,Pharmacist
+166,Timothy,Thompson,[email protected],29ab52d3-775e-4c52-80b0-aaa844e5faa8,Tax Accountant
+167,Anne,Schmidt,[email protected],628f471b-acd2-4d25-927b-66b262e29654,Budget/Accounting Analyst II
+168,Kelly,Gibson,[email protected],83572abc-a1cd-430e-a487-3ddaad5c8b99,Structural Analysis Engineer
+169,Michael,Rose,[email protected],50988ea4-4961-4b65-afa3-8df069745c5e,Civil Engineer
+170,Timothy,Hill,[email protected],244496bf-3db2-4c9b-ad74-87aea4abab59,Account Coordinator
+171,Evelyn,Fox,[email protected],596ddc94-04f0-49b9-bf22-0b0dcc8097a3,Professor
+172,Timothy,Chapman,[email protected],bd8b5bdd-4b01-4f6d-8bb2-84f535c5d2f3,Web Developer IV
+173,Patrick,Burns,[email protected],c124e00c-568b-42a2-a4c0-c7c2fe3cce46,Design Engineer
+174,Louis,Rivera,[email protected],faa81aa4-362d-4d2c-ba92-ecc1df60a39d,Recruiter
+175,Joseph,Ray,[email protected],6143bd9f-4ca6-42d6-9d11-9a4ba46c0d6c,Mechanical Systems Engineer
+176,James,Green,[email protected],b93ba630-fee2-420c-b7cc-7dc63c39df7e,Environmental Specialist
+177,Victor,Hanson,[email protected],032d8cb0-4e1e-4d1d-9713-21747ac54661,Staff Scientist
+178,Philip,Harris,[email protected],f2830559-13cd-40f5-a239-4f2db721ad5b,Project Manager
+179,Maria,Hunter,[email protected],e7a20408-8681-4505-9f39-65ec522b1536,Account Coordinator
+180,Victor,Vasquez,[email protected],a0a2682a-316e-438a-9516-91f84925cf4c,Account Executive
+181,Louise,Harvey,[email protected],1c840cb2-656c-4cb2-8ccc-dab61b665b88,VP Quality Control
+182,Lois,Wagner,[email protected],6f7e5bfb-58df-4dfb-bdf2-34e7b5d5041b,Recruiting Manager
+183,Joseph,Fisher,[email protected],466c34d8-6d2f-4887-9765-44504ed1f6fa,Help Desk Technician
+184,Irene,Coleman,[email protected],357a69ed-230c-4ec3-9396-6201ca6994cf,GIS Technical Architect
+185,Philip,Coleman,[email protected],484ef852-22dc-4916-8eb4-e0c58f141e88,Human Resources Assistant III
+186,Lisa,Payne,[email protected],d6808da5-1177-44fb-ab30-422770e695a7,VP Accounting
+187,Debra,Richards,[email protected],acdffb8e-1da9-4875-a4bc-9c97c1ec522d,Chemical Engineer
+188,Helen,Lynch,[email protected],2cf62c0a-85cc-4f10-8ad9-57cfd7b6ebc9,Administrative Officer
+189,Jesse,Cunningham,[email protected],eb2ed035-7592-492a-b7ca-49540aa32d7d,Food Chemist
+190,Ruth,Ward,[email protected],2dab24e6-d2d6-4152-b961-428e1f086011,General Manager
+191,Wanda,Gray,[email protected],7b136cdc-8e3c-4f8a-9b5d-26f3aa1a4d71,Programmer II
+192,Helen,Mcdonald,[email protected],7c77c285-156e-4296-8634-74d856785394,Technical Writer
+193,Robin,Burke,[email protected],72260adf-2cd4-4a05-8db0-c80b6a519942,Dental Hygienist
+194,Shirley,Burns,[email protected],61fcfb5d-39b5-44f5-b9f2-b7f6dd845221,Dental Hygienist
+195,Charles,Payne,[email protected],c08339bc-c436-4666-acf5-6b6ae833c5ef,Media Manager I
+196,Benjamin,Hill,[email protected],3915ef19-5788-4b89-8409-8963f2758f61,Media Manager IV
+197,Susan,Martin,[email protected],a9158fb8-46ca-4c1a-b1d2-294665b61632,Nurse
+198,Ernest,Green,[email protected],46b30115-0c91-4050-8e93-6e347ccf191b,Computer Systems Analyst II
+199,Bruce,Harrison,[email protected],21f54f7f-b4a2-42ec-b279-4759588089c9,Sales Associate
+200,Joshua,Meyer,[email protected],68a7cbdb-7748-42af-9d91-320da08b13d7,Senior Financial Analyst
+201,Brandon,Nguyen,[email protected],5f4f689c-0f60-4188-8179-bb562d814502,Human Resources Manager
+202,Betty,Morales,[email protected],7f65f42c-d5b4-4282-914b-fa416f4c65ec,Professor
+203,Arthur,Gordon,[email protected],4f33b4f7-3499-4d64-b7ea-1ad691aa57f1,VP Marketing
+204,Kelly,Carter,[email protected],e9fae863-5790-44b0-ac29-ca521fb42bf9,Analog Circuit Design manager
+205,Diana,George,[email protected],d0bdbea2-daee-4371-9a62-54d185ae2417,Payment Adjustment Coordinator
+206,Fred,Castillo,[email protected],9f37b32e-9e79-43f4-9404-f27602fc767f,Programmer III
+207,Shirley,Medina,[email protected],0e51e870-279b-4386-8943-a7c50ec9d627,Safety Technician I
+208,Adam,Dixon,[email protected],6e75d70b-7e35-4c36-b79a-1cba846744eb,Recruiter
+209,Benjamin,Cox,[email protected],31273bbd-06bf-4fc4-afc2-4efd24b93208,Financial Advisor
+210,Lillian,Hayes,[email protected],18eb4dd5-94df-4aa8-aaac-7efe8b6867cb,Staff Accountant III
+211,Keith,Burns,[email protected],8549b934-f0c4-4627-a861-c08a8b7f018c,Assistant Media Planner
+212,Mildred,Porter,[email protected],51c2a94a-3c9a-4a5c-9565-993464296f34,VP Quality Control
+213,Joan,Gonzales,[email protected],ca5c5c67-fe80-4358-b210-2050b4198f17,Programmer IV
+214,Kathleen,Lewis,[email protected],0b2cc0ea-f910-49cc-853b-8ee3e453e37f,Budget/Accounting Analyst III
+215,Joshua,Nguyen,[email protected],1a6cc784-86a4-4f00-9b63-8261c4d2237c,Human Resources Assistant III
+216,Adam,Richards,[email protected],1351efc0-eec0-45f6-9f9c-1276fcc78e69,Product Engineer
+217,Scott,Andrews,[email protected],2e247d68-01fb-41e8-90a1-8d1e22be71c7,Structural Analysis Engineer
+218,Jennifer,Owens,[email protected],5f5e1dec-75c9-4ee8-8c43-e9c9c760a5a8,Computer Systems Analyst III
+219,Jeffrey,Morgan,[email protected],7da87e93-51d0-41a9-8866-bde6e7bf9520,Staff Accountant IV
+220,Patricia,Martinez,[email protected],9e0a8dfd-cd4e-4d02-a291-56f6747c7880,VP Sales
+221,Wayne,Ross,[email protected],68ae32db-2097-4fee-82ca-833f4cee4cf2,GIS Technical Architect
+222,Debra,Fowler,[email protected],8bf58ec4-6409-40bc-8775-116560b0a510,Staff Scientist
+223,Brenda,Alvarez,[email protected],90325933-a66a-4185-b158-b3acccc21fda,Legal Assistant
+224,Ann,Cruz,[email protected],0244c426-54ce-4890-ad45-f227cabb4324,Data Coordiator
+225,Julie,Ruiz,[email protected],36696fd3-4a50-4010-a96f-f49934621d98,Chemical Engineer
+226,Wayne,Davis,[email protected],da52697e-3863-4fd4-89d4-5bcc3b520476,Data Coordiator
+227,Helen,Ward,[email protected],dac417f0-428c-4c03-af1f-03c5b0edd18f,Director of Sales
+228,Robert,Little,[email protected],713c306b-4b1d-4b45-ac83-9de8f6a9723b,Desktop Support Technician
+229,Steve,Willis,[email protected],0e9a3525-07db-4e0c-ba08-ff61a76d2340,Speech Pathologist
+230,Pamela,Peterson,[email protected],a02deda1-c12d-4e1f-880c-d80bb135850a,Tax Accountant
+231,Benjamin,Russell,[email protected],733ce314-d826-4463-9451-30320d2364a4,Associate Professor
+232,Sean,Campbell,[email protected],22339a04-7a22-414e-bd69-05d8b283e6c7,Systems Administrator III
+233,Henry,Green,[email protected],0a6c8096-9f3e-453c-bcc7-c861ee20fda2,Web Designer I
+234,Barbara,Robinson,[email protected],1efb49ac-9648-4e58-9bfe-b31791b9ff0c,Product Engineer
+235,Howard,Hughes,[email protected],68d5a779-7703-4e9f-aa9a-31442e1b2ece,Web Designer III
+236,Aaron,Adams,[email protected],0d016d42-6fc4-481e-8082-fcec26a4e0c5,Database Administrator I
+237,Ryan,Dean,[email protected],7fb671ef-dcae-4812-810f-2494c44f5532,Research Associate
+238,William,Tucker,[email protected],8ea26966-f1a9-414e-921a-bdefb7a49391,Environmental Tech
+239,Annie,Collins,[email protected],9e28ea5e-ae5d-4b1f-baa0-70c25abdd11d,Sales Associate
+240,Cheryl,Meyer,[email protected],d5e324a6-16b4-4b96-a1be-1834d2444f95,VP Quality Control
+241,Gary,Hayes,[email protected],7040255b-6c5b-4e5c-9e4d-7aa20ebd5f97,Administrative Assistant I
+242,Diane,Bell,[email protected],d597a7b5-f351-4eff-b7ba-f7d3fcd9b6a3,Safety Technician IV
+243,Sarah,Burns,[email protected],5f4d570b-c524-47be-9eec-6a9dc9aee828,Administrative Assistant III
+244,Todd,Fields,[email protected],7c7e6ec0-4ca9-47b8-9b75-7d9a84faacff,Clinical Specialist
+245,Robin,Perkins,[email protected],d840f60f-a668-4956-9943-9c8407f56a09,Desktop Support Technician
+246,Bonnie,Gutierrez,[email protected],ffb255a4-ec93-46d0-9cdc-70be20730aba,Programmer III
+247,Christopher,Cruz,[email protected],0185d755-e50e-46d9-9809-614d034999fd,Systems Administrator III
+248,Walter,Price,[email protected],a6cebecc-aa6c-4cf4-a426-af3dcdd72626,Systems Administrator I
+249,Samuel,Carter,[email protected],f00ebfae-6317-4024-93ed-8dcd114f39e9,Research Associate
+250,Amy,Carter,[email protected],f613cf02-4540-4fe9-8bdb-1ccb809a2258,Mechanical Systems Engineer
+251,Amanda,Butler,[email protected],7e1d00a4-bdb1-4a76-b12e-0dbc524e4b5b,Safety Technician II
+252,Beverly,Jenkins,[email protected],5f11a756-c23e-406f-ab9a-ca03a8f09a9e,GIS Technical Architect
+253,Ruth,Chapman,[email protected],4a8ad499-3a7f-4815-94c0-bc6b4f7473c2,Developer II
+254,Eugene,Watkins,[email protected],f572d598-1276-4f10-8218-2f85906bfef5,Occupational Therapist
+255,Peter,Howell,[email protected],609762cf-bc17-4f73-9ad0-4224ba6ef103,Web Designer II
+256,Victor,Hicks,[email protected],b3183431-6ef4-465b-ba91-99e728d7150c,Technical Writer
+257,Patricia,Dixon,[email protected],3feabe71-164d-45d1-9c4d-8327954e7e3e,Professor
+258,Johnny,Williamson,[email protected],aaaf709f-a5f3-402b-bf9b-afbf13af30e4,General Manager
+259,Ann,Mills,[email protected],2c0bce8f-ea96-4694-b906-ed3d1b74c93e,Environmental Specialist
+260,Jennifer,Kennedy,[email protected],538ca0b2-0dc0-4c85-b0d9-22d069026d86,Paralegal
+261,Gloria,Richards,[email protected],75f1c12d-9226-48d0-b464-9019ba224878,Associate Professor
+262,Charles,Hall,[email protected],d41eb4bd-031b-4935-a7fa-ac758ff9865b,Operator
+263,Mildred,Fuller,[email protected],bd53487e-d056-44a1-a0f5-a2c3e7c7e7f6,Editor
+264,Howard,Welch,[email protected],9d5ce573-bcef-46e9-8fd1-624fbeaa1d6a,Payment Adjustment Coordinator
+265,David,Sanchez,[email protected],4fbf6582-03b9-4af7-888f-45c2f2b9f608,Nuclear Power Engineer
+266,Louise,Thompson,[email protected],2dd7f5f3-b155-4ab2-ba0c-b3bdc62e90c0,Executive Secretary
+267,Kenneth,Holmes,[email protected],1f3c2af3-9fc1-415c-8bd5-a305239ef6bf,Mechanical Systems Engineer
+268,Douglas,Garrett,[email protected],58b8f363-d965-48c1-9c8a-2c3d9d1b5609,VP Sales
+269,Jennifer,Peters,[email protected],ab28de3f-979f-4c6c-be89-2ccb588cc330,Internal Auditor
+270,Marilyn,Butler,[email protected],76316525-373d-475d-8a13-53f7ea08a3d8,Sales Associate
+271,Dorothy,Howard,[email protected],27972e7d-e998-4d80-b896-83810c4fad07,Internal Auditor
+272,Jimmy,Miller,[email protected],b4ebecf8-e4d4-4a23-8799-d882bc976f27,Electrical Engineer
+273,Bonnie,Oliver,[email protected],bdc1e6a5-67a5-4c4e-b2bc-665e0ae2845a,Automation Specialist IV
+274,Doris,Mitchell,[email protected],d3f9fc92-10a3-4cda-8189-1bf5b22afac7,Compensation Analyst
+275,Joseph,Sims,[email protected],feb0eb04-111d-41cc-b5f7-7526fafd070f,Statistician III
+276,Nancy,Mendoza,[email protected],3e9d8e14-e9cd-4194-a393-c6b4492c05e2,Structural Engineer
+277,Jose,Ruiz,[email protected],d33f8460-d0c8-49af-ac1f-4f051c450973,Information Systems Manager
+278,John,Harrison,[email protected],32d332f2-0874-471c-866d-af50cd58b80c,Sales Representative
+279,Roger,Cunningham,[email protected],5668ee1e-dde7-431c-8ed0-cbdf1c14bac2,VP Product Management
+280,Joyce,Austin,[email protected],368b27b6-8c2c-4a70-9815-23a0fc2a572f,Structural Engineer
+281,Samuel,Gonzales,[email protected],3ec3a81c-269c-45ee-b6f6-c01c4a02086b,Professor
+282,Michael,Watkins,[email protected],039ca62c-1c12-4194-b453-fbadc3743d48,Environmental Tech
+283,Jean,Hunt,[email protected],7e6fa9aa-c350-4a22-8148-e5680f7297cd,Project Manager
+284,Craig,Mccoy,[email protected],27b34637-4487-4da6-8955-dc5f5a759c17,Paralegal
+285,Lillian,Howell,[email protected],e686ea87-cabb-418d-a458-66751454eaae,Speech Pathologist
+286,Willie,Duncan,[email protected],c5b4b42f-3c04-44fd-ac48-ee0002f2b529,Database Administrator IV
+287,Justin,Palmer,[email protected],8f5e6c35-2db7-4fcf-b349-b959dcb76a55,Mechanical Systems Engineer
+288,Sean,Wells,[email protected],fca31851-6e4a-472e-899b-fcca538b3ef2,Senior Cost Accountant
+289,Willie,Jackson,[email protected],e18e486d-54ec-4c7f-995a-7e225e2e1ddb,Structural Analysis Engineer
+290,Robert,Diaz,[email protected],310899a6-8942-4611-8f65-65233682a971,General Manager
+291,Louise,Freeman,[email protected],e6ddd495-8812-4c4c-bb5e-2f834e7ce0ca,Project Manager
+292,Barbara,Montgomery,[email protected],dcec221d-e3aa-4ea6-a45f-6355526ce5dd,Staff Scientist
+293,Kelly,Simmons,[email protected],b0805df6-f84e-42ce-b5af-c41c9dce2931,Nurse
+294,James,Hughes,[email protected],692ac28f-17dd-4695-a232-7c03887087f3,Environmental Tech
+295,Jeffrey,Robinson,[email protected],1044eca2-3849-4410-8181-e5f9601d1e5b,Recruiter
+296,Cynthia,Perry,[email protected],c8c30a6f-6b39-4a3f-9266-13694c7914af,Graphic Designer
+297,Evelyn,Sims,[email protected],1b41e82b-49f2-4735-86fa-27f03bcd8c49,Social Worker
+298,Kathryn,Banks,[email protected],24d86bef-3c86-4918-b987-e7a29b4a4630,Budget/Accounting Analyst II
+299,Jean,White,[email protected],fa5219f2-3893-4e8f-84b5-5e8ed549d8dc,Registered Nurse
+300,Rebecca,Thomas,[email protected],3f389cf7-bdc0-41f7-bd47-098754195f84,Operator
+301,Alice,Bowman,[email protected],e1aec782-5d7e-43bd-9c84-48edfbe3f3b6,Community Outreach Specialist
+302,Ryan,Taylor,[email protected],e0241ebd-fb6b-4171-903d-605d39d58f11,Editor
+303,Douglas,Arnold,[email protected],770927cf-3a63-4c3e-8e2b-0e7a1b527be8,Environmental Specialist
+304,Jesse,Welch,[email protected],9e7e1712-ab5a-4ad3-bab3-90e2e36348f2,Senior Financial Analyst
+305,Nancy,Mccoy,[email protected],56acb84a-16ad-4f9f-a80e-5f4694d753e8,Design Engineer
+306,Jack,Reid,[email protected],719ae0db-9ea8-461a-99ca-b9fc181f29a4,Community Outreach Specialist
+307,Julia,Peters,[email protected],1b94f5f8-5082-4381-aefb-2c4bf470900b,Junior Executive
+308,Jeffrey,Morgan,[email protected],35a55be5-0c94-43ee-8f8a-da1e94c62a61,Analyst Programmer
+309,Melissa,Elliott,[email protected],b49484ce-7591-4f47-b1de-d9548045fcd2,Project Manager
+310,Craig,Sanchez,[email protected],1782e18b-3115-44ad-b512-ee58d5120cf1,Research Associate
+311,Diane,Lynch,[email protected],9cc31a78-bef9-461e-b1a9-018549c97042,Technical Writer
+312,Denise,Burns,[email protected],9a0b1e35-9d78-4ba4-a5d5-5c408deb26cc,Systems Administrator III
+313,Susan,Bryant,[email protected],722e0461-4c56-4a3d-ac58-24eac4916405,Software Consultant
+314,Debra,Garza,[email protected],24be3802-ba60-414c-8989-1d1348882fe4,Electrical Engineer
+315,Arthur,Carter,[email protected],0954c3c7-541d-4f4d-8865-09a4449f848f,Senior Quality Engineer
+316,Amy,Flores,[email protected],4bec7aa4-95ef-42ac-b9f8-f47523f1d929,Senior Cost Accountant
+317,Paula,Mills,[email protected],ceaa8342-82ff-4503-9608-58a18adf4247,Information Systems Manager
+318,Sara,Webb,[email protected],097b9339-8af3-46e0-aa91-cb58f4a99b59,Biostatistician II
+319,Ralph,Cox,[email protected],7396d5fd-db74-45f4-bb79-dc7b7218809a,Assistant Professor
+320,Deborah,Graham,[email protected],e40911e0-8b3d-4700-ac05-e6b610693d61,Administrative Assistant I
+321,Kathryn,Mccoy,[email protected],b1b8a68e-8f94-4f0a-9343-1bfd9ea1aa97,Engineer II
+322,Henry,Sullivan,[email protected],32560c66-03b0-4c0e-a10b-396856728ebd,Senior Sales Associate
+323,Robert,Snyder,[email protected],0a488e32-c650-445f-bc01-7798675d602b,Assistant Media Planner
+324,William,Morris,[email protected],c5c492e2-3132-4b2d-9829-21dc3a73520d,Assistant Media Planner
+325,Andrew,Bennett,[email protected],5463b4ff-2af1-4f3c-9149-f69be1445ca7,Administrative Assistant III
+326,Larry,Willis,[email protected],7526d852-737a-48f0-9b91-862f5032b7c7,Assistant Media Planner
+327,Barbara,Cunningham,[email protected],d5cc442a-850c-4791-ae1f-7b02399e99cd,Environmental Specialist
+328,Maria,Boyd,[email protected],06e3beb7-ab1d-448b-a5d4-d92254e719e2,Geologist I
+329,Linda,Kim,[email protected],e108e22e-d2e3-4cf1-8b49-27f8ee6604cc,Actuary
+330,Peter,Dean,[email protected],2342272a-14bc-47ca-a197-2ab2fccf6556,Programmer Analyst I
+331,Julia,Ramos,[email protected],93e0ec4a-12fb-4408-b1e7-196e0d91386f,Geological Engineer
+332,Beverly,Fisher,[email protected],308d3220-557b-4e2f-bf0c-65290c9cf07d,Systems Administrator I
+333,Stephen,Ray,[email protected],0f4d473c-5eb1-4168-86ff-70611ad39956,Statistician II
+334,Laura,Welch,[email protected],b4e928bf-8ca1-464d-b36c-618dc44f73f0,Environmental Specialist
+335,Mildred,Mason,[email protected],caa4bc39-0607-4ce8-b4fc-16245da2be30,Senior Editor
+336,Clarence,Cunningham,[email protected],1150d883-e538-41ad-a04c-d69998cfbdd1,Human Resources Manager
+337,Frances,Ramirez,[email protected],04268424-b5db-4572-91a2-a81dd25b277d,Senior Sales Associate
+338,Ruth,Fox,[email protected],b63747eb-aee7-455b-bea2-860c52bf3f58,Assistant Manager
+339,Gloria,Barnes,[email protected],1cd0af23-24fc-44a4-94a7-6a3d6069046c,Biostatistician III
+340,Jane,Sanders,[email protected],5bbd5906-4594-4314-9464-271d93ac488a,Data Coordiator
+341,Joseph,Carroll,[email protected],6322bc60-e88b-4420-9f35-e06efc0e0703,Physical Therapy Assistant
+342,Judith,Watkins,[email protected],7573af51-1c6d-431a-8caa-2e5c4a57de9c,Senior Editor
+343,Donna,Porter,[email protected],4f25a97d-0d05-4752-b0b2-c425828ac316,Executive Secretary
+344,Andrew,Mcdonald,[email protected],cf2244e0-0137-4823-b691-21431efa0f44,Operator
+345,Thomas,Boyd,[email protected],f1f53751-2aa8-4d13-92dc-f60100b3e124,Occupational Therapist
+346,Shawn,Roberts,[email protected],d5fb581e-28d1-44d8-a2e4-b5730ee854f9,Nurse
+347,Dennis,Watson,[email protected],a188f60d-baea-4b5f-8e62-391a51b1bce3,Compensation Analyst
+348,Virginia,Bennett,[email protected],ed0dafb7-6f0f-40d7-bae2-46ed1b55dd81,Assistant Professor
+349,Diana,Hicks,[email protected],daf3c712-5a25-4b8b-b891-43cb9a40c3e0,Product Engineer
+350,Craig,Roberts,[email protected],777247ec-c2f5-443b-9b64-4d9364945837,Director of Sales
+351,Tammy,Burke,[email protected],bce96727-4e44-4bd1-a850-69c8a389e311,Senior Editor
+352,Jesse,Chapman,[email protected],1e373c2e-40e3-4153-8ed7-52dc1952911e,VP Sales
+353,Carl,Johnson,[email protected],f41d5a1b-7006-4820-bafb-aac446e2f2ae,Technical Writer
+354,Lawrence,Jones,[email protected],40299982-3c7a-4007-b128-0524f5e2f0ca,Senior Financial Analyst
+355,Kelly,Perkins,[email protected],a74d2fad-bf1a-452a-ba30-d647a880b39b,Geologist II
+356,Willie,Spencer,[email protected],50f0dd57-6237-403a-9df4-dceb90911c29,Computer Systems Analyst IV
+357,Janet,Harrison,[email protected],df3764ac-4c3f-42aa-a120-380bd5db28e9,Help Desk Operator
+358,Bonnie,Parker,[email protected],db34f7a9-7d11-4e43-b1df-b30fde6a3c96,Sales Representative
+359,Samuel,Howard,[email protected],67312ed0-e2d6-4b70-8db3-40612383a697,Assistant Professor
+360,Angela,Olson,[email protected],24863a98-15d7-4186-b0a7-6ecf8c8a86fa,Biostatistician III
+361,Jimmy,Shaw,[email protected],0974a6c1-25cc-4c01-8e03-746ae9a3bfe6,Speech Pathologist
+362,Louis,Dunn,[email protected],8b80d075-dba5-441d-8d55-043e48f37927,Office Assistant I
+363,Clarence,Fowler,[email protected],0fc302b0-c83f-4c99-bf2a-ad439366c208,Health Coach IV
+364,Steve,Montgomery,[email protected],d2bd1549-5fe6-4a36-a04c-d949a4d0859c,Senior Developer
+365,Maria,Greene,[email protected],04f0b6ea-1acc-4dfe-a2e0-e5242a49ce8e,Research Nurse
+366,Sarah,Murray,[email protected],d1ca15e0-16b9-496a-bc64-36d9567a1bb5,Nurse Practicioner
+367,Willie,Arnold,[email protected],abcba54d-5b7f-4c4c-bd25-1b36e4ce85d2,Physical Therapy Assistant
+368,Phillip,Ward,[email protected],7085691c-0d56-41db-911a-bb3428c0454b,Senior Editor
+369,Wanda,Vasquez,[email protected],24147daf-a5e9-4730-9561-d4c06caf036a,Civil Engineer
+370,Sara,Martinez,[email protected],95dbd560-6802-43a7-a1c3-f15c73947c4e,Structural Engineer
+371,Matthew,Chapman,[email protected],d56e1a18-e1aa-4870-9321-429510073e30,Dental Hygienist
+372,Paul,Hayes,[email protected],b37a9fe8-bc12-4fd6-91e7-c2597995095e,Physical Therapy Assistant
+373,Roy,Hudson,[email protected],a43e095b-a049-4b50-942e-c2dc7fb2aa36,Recruiter
+374,Linda,Little,[email protected],4658e90f-bae4-4409-b6e5-39fb627c5809,Payment Adjustment Coordinator
+375,Diana,Lopez,[email protected],684a4524-16a0-4a15-9c63-0949fe1da6b2,Teacher
+376,Joshua,Ferguson,[email protected],e1bd72ff-47de-466c-8277-44f45a856aad,Office Assistant IV
+377,Jennifer,Larson,[email protected],031a77b2-451b-4f72-95cd-dc214d704a3a,Operator
+378,Diane,Marshall,[email protected],1350199c-9bc5-4cfe-b0dd-da442fe73ca3,Assistant Professor
+379,Daniel,Bennett,[email protected],c22dc9a3-8c79-468c-b62f-642b0733c353,Registered Nurse
+380,Paul,Schmidt,[email protected],677b6386-0844-4ac5-9e73-e135a7de3475,Dental Hygienist
+381,Harold,Phillips,[email protected],8b7a1841-214f-46c7-973b-74c8144ab293,Occupational Therapist
+382,Willie,Adams,[email protected],2b0ff57e-f400-4bbb-83d6-e8d0aa730a43,Librarian
+383,Linda,Alexander,[email protected],2999075e-41ca-433e-8e3d-abfa55590b51,Web Developer II
+384,Sarah,Ramos,[email protected],080df0a0-6b0a-4f82-a123-27fb6c2e3827,Graphic Designer
+385,Wayne,White,[email protected],f981821a-a4ab-48bf-8c1b-23dc2d138eff,Director of Sales
+386,Harry,Bailey,[email protected],eddcce96-85d2-4a75-9fb5-b8339850b257,Legal Assistant
+387,Lori,Morrison,[email protected],f6cd668e-9523-4ac8-b8ab-5045974b36b7,Assistant Professor
+388,Joseph,Murphy,[email protected],11793105-146b-48f5-bb41-a3474b640349,Administrative Assistant I
+389,Chris,Bowman,[email protected],e4a19d36-e928-4b09-9dd0-a6ae2ea258f5,Mechanical Systems Engineer
+390,David,Lawson,[email protected],f6ce6093-7ec0-49b7-b660-4e127cd5cc01,VP Accounting
+391,Randy,Smith,[email protected],81f42afa-28de-42d9-8d78-2f9192377499,Payment Adjustment Coordinator
+392,Michael,Knight,[email protected],5579e102-8e06-433e-b058-17c0acc41c44,Analyst Programmer
+393,Evelyn,Holmes,[email protected],025ea264-7758-44ac-ac9e-b907853bc5ef,Media Manager IV
+394,Janet,Wright,[email protected],0b7f5da2-69e2-4c4b-b6b2-1631368f6692,Sales Associate
+395,Raymond,Perry,[email protected],3fba468d-dc7f-4d50-b248-3e88180c572b,Occupational Therapist
+396,Adam,Bowman,[email protected],2f0579d6-8778-4dba-9bab-cb4b50950610,Senior Quality Engineer
+397,Gerald,Ramirez,[email protected],c1449085-287a-49e5-8d2b-7ac5c318bb47,Tax Accountant
+398,Virginia,Shaw,[email protected],6d67245d-874b-470a-8376-126f25335ac7,Food Chemist
+399,Ryan,Stanley,[email protected],e83e793a-1858-40f0-ad77-1b3cd0617140,Quality Control Specialist
+400,Jesse,Taylor,[email protected],65b7c81f-f308-40ca-8202-54dd414d4e89,Statistician I
+401,Joseph,Hamilton,[email protected],02fd1d1c-efd1-4e03-9d30-7eb0253d43df,Legal Assistant
+402,Earl,Harris,[email protected],721562d6-75af-4b71-8e23-ccca520f221f,General Manager
+403,Betty,Hill,[email protected],0e970ecd-952f-4c2f-a1a0-9d10c758efbd,Graphic Designer
+404,Laura,Lewis,[email protected],b7d1ab0a-55ba-41f4-a7ad-52740ae4d426,Dental Hygienist
+405,Anne,Henry,[email protected],1292033b-bf4e-4f29-81ae-0b50cec2ea66,Cost Accountant
+406,Diane,Parker,[email protected],8b756392-0b36-45ee-8057-c6045d935230,Desktop Support Technician
+407,Irene,Rodriguez,[email protected],164c2371-2662-4f14-8c1b-ab871c9a9903,Nurse Practicioner
+408,Edward,Richards,[email protected],73aa457d-488b-40b6-91ab-b2ccff875e1a,Paralegal
+409,Dennis,Kelly,[email protected],7594f850-8449-4521-ae77-5084f15849c5,Editor
+410,Andrew,Alexander,[email protected],33f73273-c8b9-444b-9817-fd2b2ef20812,Senior Financial Analyst
+411,Julie,Lopez,[email protected],3536321b-726a-49f0-bb0c-492ac059684c,Internal Auditor
+412,Juan,Powell,[email protected],3bb2c34b-0c09-4cfe-a041-813076152fef,Mechanical Systems Engineer
+413,Cheryl,Knight,[email protected],987e80c9-7f94-49cc-bcfc-fc7b83574d8e,Senior Cost Accountant
+414,Eric,Nguyen,[email protected],2f1ee12e-43fe-484b-8a70-46c1702ab537,Developer I
+415,Jean,Dean,[email protected],3cbc2e55-525b-4ce7-a880-7f660f9413d2,Information Systems Manager
+416,Larry,Fox,[email protected],5f9370fb-0d14-4aba-9c60-57a0f3f57f50,Structural Engineer
+417,Alan,Garcia,[email protected],8e5f8936-86fd-4747-bcf2-6cfae96784c7,Assistant Manager
+418,Bobby,Morales,[email protected],02e74cfc-5bc9-4502-8322-adaaea2e6056,Software Engineer IV
+419,Gloria,Grant,[email protected],71cfba89-63f4-4464-b60a-c3808e5a12cb,Chemical Engineer
+420,Clarence,Powell,[email protected],b5b3837b-cf35-4957-9d2d-defe76d5ffa1,Programmer Analyst I
+421,Sarah,Crawford,[email protected],ba068df5-104f-4481-a45e-040119b939ae,Database Administrator I
+422,Alan,Thompson,[email protected],c7596af8-5395-4ff4-9bba-6e7313cff5b7,Speech Pathologist
+423,Andrew,Montgomery,[email protected],7c0bd00a-17fe-4046-b21d-4df8fde9f625,VP Quality Control
+424,Chris,Dean,[email protected],bcbfad50-50d9-409b-8d85-c255d0bd71d8,Senior Cost Accountant
+425,Frank,Snyder,[email protected],49f25880-66b0-45ee-be8a-ba551f991e58,Accounting Assistant II
+426,Arthur,Dunn,[email protected],7299285a-61a5-4884-bef8-18faee76d1ef,Actuary
+427,Sandra,Oliver,[email protected],b4454fec-0d9d-4d77-94df-3433cb92dd21,Pharmacist
+428,Clarence,Crawford,[email protected],ef1e38bf-92bf-4a64-97ad-af71dc442cc7,Chief Design Engineer
+429,Michael,Henry,[email protected],021a0dc9-3bc7-41cd-a7f7-a30e134b66d9,Senior Sales Associate
+430,Ann,Sims,[email protected],1415c218-254d-47ad-ba0a-123335652306,Senior Editor
+431,Judy,Shaw,[email protected],6abf10b0-e624-4b87-8c17-ead24a3e3911,Biostatistician I
+432,Fred,Gomez,[email protected],574f03c3-5af6-4296-808d-1b2c1fe91327,Help Desk Operator
+433,Scott,Elliott,[email protected],4e56cc76-7b22-494c-aa4b-5fbd29b2c347,Environmental Tech
+434,Russell,Elliott,[email protected],1c64a0c1-991b-444a-b130-08c70123aceb,Engineer III
+435,Benjamin,Robinson,[email protected],faafbbf6-4e10-47a0-95a8-909742d06135,Safety Technician II
+436,Wanda,Day,[email protected],faa06ef1-0e72-4810-bd9c-4bfead1dd60a,Junior Executive
+437,Bonnie,Hicks,[email protected],4f886833-fb16-4b2d-9850-55455b8927ea,Senior Developer
+438,Andrea,Lee,[email protected],b0dc0eaf-d230-4382-986a-1d291ae8a72a,Librarian
+439,Joshua,Chavez,[email protected],0be7aa60-9b64-498b-a4eb-de2993e6e45e,Registered Nurse
+440,Kimberly,Gonzales,[email protected],808edd9c-f540-45ed-ba40-f545984327a7,Information Systems Manager
+441,Katherine,Davis,[email protected],7cb1767b-1f71-4eb2-bde1-9a01ae70a11e,Senior Financial Analyst
+442,Terry,Watkins,[email protected],bab00883-7ed2-48f3-8e1c-0dbae3f92cee,Software Test Engineer I
+443,Timothy,Simmons,[email protected],5e223e8a-0e4f-46db-8f2c-c3e6ed1d1158,Payment Adjustment Coordinator
+444,Adam,Stewart,[email protected],35e6450f-3060-4035-9571-c4e9099f03ac,Software Consultant
+445,Rebecca,Sims,[email protected],a09af49e-07ab-4b50-82a7-bb4b2e5df0ca,Associate Professor
+446,Justin,Smith,[email protected],dfe43d84-0da3-4bb4-948c-44c3e5991413,GIS Technical Architect
+447,Ruby,Ruiz,[email protected],0b5d6792-3df9-4fe6-a95f-51adde27fbb8,Geologist I
+448,Lawrence,Ford,[email protected],4a7820c4-8ca3-4e53-a04b-0be96ad0f2a2,Nurse
+449,Cheryl,Gardner,[email protected],57a7bf75-af05-4dd8-85f9-aa5f7b1af153,VP Product Management
+450,Harold,Watson,[email protected],dc0b6c41-5ce1-4d69-bc17-8e6b94391ea8,Business Systems Development Analyst
+451,Nancy,Watson,[email protected],87dccd32-0d96-4020-b265-7744b474716a,Quality Engineer
+452,Thomas,Tucker,[email protected],9b86a2e9-97af-460b-807a-9c3844abc41f,Health Coach II
+453,Theresa,Cooper,[email protected],8f3c97b6-2619-4345-b8fe-be8080b19627,Recruiter
+454,Harold,Young,[email protected],9146ee2c-6be2-4250-95f1-b401ca1ede9c,Assistant Media Planner
+455,Lisa,Reid,[email protected],b7f21cb7-bf9f-4251-9328-6adde71afb70,Help Desk Operator
+456,Peter,Schmidt,[email protected],db36da8c-06e4-4e43-a943-4a4b5454af14,Health Coach II
+457,Norma,Flores,[email protected],12b97b2a-d4d7-46a6-b86d-38f4dd27fd6b,Food Chemist
+458,Steve,Adams,[email protected],14da6c2d-4e67-4435-ae09-d7503a1d616f,Administrative Officer
+459,Charles,Dean,[email protected],9797a26c-3de3-41a8-8ecc-0547938cae1c,Health Coach III
+460,Steve,Warren,[email protected],08972af2-ce02-490b-a406-ac343de4b6dd,Geological Engineer
+461,Judith,Gordon,[email protected],a57b543d-2cac-4433-b19d-0b2a1e8ed48f,Analyst Programmer
+462,Irene,Stevens,[email protected],e8e9c902-2bd7-46cc-8d01-0118008e5e13,Payment Adjustment Coordinator
+463,Jonathan,Schmidt,[email protected],f5765c40-8974-4356-87f8-2d4dc2671e61,Human Resources Assistant I
+464,Ruby,Perez,[email protected],cd6079e7-7d40-48bd-8e22-35cd629df190,Accountant III
+465,Justin,Willis,[email protected],07b03b82-3bec-4759-b7ef-7c7faacf8bfe,Speech Pathologist
+466,Ronald,Reid,[email protected],296e584f-7b93-4485-9247-4221beb258c7,Editor
+467,David,Robinson,[email protected],11c0f7f8-7d96-4061-b7d4-af02da88f73f,Account Coordinator
+468,Jimmy,Evans,[email protected],6fd05afb-11e9-4b36-9a28-786bc72b146d,Senior Editor
+469,Kenneth,Andrews,[email protected],5db85395-cf2e-4ab6-ba69-594c3dc2a01d,Teacher
+470,Frances,Reyes,[email protected],e1e50444-d976-490d-bc34-969559938390,Help Desk Technician
+471,Cheryl,Harris,[email protected],8f326f1e-f2a7-4b7a-a7bf-31ce1db409ef,Engineer II
+472,Clarence,Knight,[email protected],543ec73b-4d0b-468a-b6ac-4bf0d3695a85,General Manager
+473,Randy,Dunn,[email protected],56b06b96-81d2-4bbf-b967-fc5de3c10472,Editor
+474,Mildred,Nichols,[email protected],cae3c81b-3e5d-480d-adab-02012e16a125,Account Representative IV
+475,Virginia,Edwards,[email protected],ae29fbb2-b257-4c24-a356-d78c555d5584,Physical Therapy Assistant
+476,Tina,Russell,[email protected],0e1304a8-c60f-49bb-91dd-d9d43423ed05,Financial Analyst
+477,Marilyn,Webb,[email protected],055d6f2a-c384-4a9f-9a5b-aece8df040cd,Librarian
+478,Bruce,Little,[email protected],e68c32c0-ec78-4948-8f47-f7e182dd7d96,Marketing Manager
+479,Kathy,Reed,[email protected],5fc055d8-1c79-432d-9768-7e6438e69936,Assistant Professor
+480,Joyce,Day,[email protected],3ece012f-c0e6-4749-8762-d76914a63294,Web Developer III
+481,Patricia,Garcia,[email protected],8896fdf2-3e9b-4c11-a538-fdfed5f0ee57,Web Designer III
+482,Jane,Bryant,[email protected],e1f08b35-f487-4aad-bac4-487a1b0aeaa1,Budget/Accounting Analyst I
+483,Lori,Baker,[email protected],e1f49c8a-389c-419c-bbdc-89f600b9d31b,Speech Pathologist
+484,Brenda,Gomez,[email protected],efa9d7b2-3a03-43b8-8804-eb35762ac618,Information Systems Manager
+485,Stephen,Freeman,[email protected],dc463ebb-3661-4f3d-aa4d-06fe42279d33,Developer II
+486,Andrea,Harper,[email protected],ce5f73b9-5b01-4660-9276-9798efcf17d3,Research Assistant II
+487,Karen,Evans,[email protected],5ba2766b-1bef-4d70-afe1-0fc95f0be942,Financial Analyst
+488,Pamela,Dunn,[email protected],4aa48ed6-2e3e-47ca-ac14-11ec9521891c,Nurse Practicioner
+489,Janet,Ross,[email protected],a98c9bd2-ad6b-4708-a254-a7bcba4f0eff,Compensation Analyst
+490,Sarah,Bishop,[email protected],ff1d3c9e-b42a-4142-bc3d-e86ffd6c0094,Registered Nurse
+491,Douglas,Simpson,[email protected],0e41bb21-7ea6-4e5c-84c4-11c9caa251a8,Account Coordinator
+492,Edward,Marshall,[email protected],a4c7ca2a-e4c0-4c7b-9af6-165ed90ee58d,Software Test Engineer II
+493,Timothy,Romero,[email protected],e691cbd1-aa6f-44a1-bda2-b2eaa30c90c1,Recruiting Manager
+494,Theresa,Owens,[email protected],d412ff1f-1565-4f2d-8971-41b6c9114fa1,Programmer I
+495,Alan,Patterson,[email protected],cffe0de9-8456-4687-bbf6-ff056c286e68,Pharmacist
+496,Melissa,Nelson,[email protected],6fce3749-92fe-4558-b4d6-506e814f3e2c,Environmental Tech
+497,Philip,Ruiz,[email protected],9fdcab88-6c75-49c0-9659-7561e0de373d,Research Assistant I
+498,Norma,Ford,[email protected],c51d917a-55e0-40c3-ac15-12b201ba70de,Research Nurse
+499,Amy,George,[email protected],da3c6ffd-d34e-452b-b07d-2134e828edec,Recruiting Manager
+500,Annie,Davis,[email protected],6383632e-5e4a-4f2e-b23f-6ee8bf148dfa,Analyst Programmer
+501,Tammy,Vasquez,[email protected],f325177f-973f-4938-8fe4-2755cc7f82c5,Executive Secretary
+502,Barbara,Henry,[email protected],f282fda9-cd3d-4456-ae48-8beb54e10ca0,Internal Auditor
+503,Bruce,Morgan,[email protected],33678e24-e3d0-4ef1-89ba-9a34a9374250,Recruiter
+504,Roy,Phillips,[email protected],3b224ffa-a792-4cfe-acd4-df72c28a4fe9,Staff Scientist
+505,Aaron,Ellis,[email protected],638d7382-2b26-4e26-bffd-1bc66cdd45db,Software Test Engineer IV
+506,Sarah,Cooper,[email protected],53838d31-6aa0-4b18-93e9-2ea9d95a621e,Marketing Assistant
+507,Mary,Larson,[email protected],f9f2361b-958d-44ed-8669-50605c15ecc0,Senior Editor
+508,Antonio,Willis,[email protected],d094e2a3-4180-4c74-849b-d30a5e625cb7,Operator
+509,Helen,Chavez,[email protected],fd183973-703f-4600-841c-8f726b2ca43c,Actuary
+510,Nicole,Romero,[email protected],f000bdd3-da8f-434c-aeea-7378780cc29d,General Manager
+511,David,King,[email protected],cada208e-b1ce-46ad-a2c7-2fa03b2f437b,Structural Engineer
+512,Clarence,Ward,[email protected],5000995a-b53f-4f29-9be7-c816df714c20,Clinical Specialist
+513,Melissa,Montgomery,[email protected],407c0645-c3cd-4602-8925-5f2fb1bdef26,Design Engineer
+514,Anthony,Young,[email protected],4af5cab1-8cd7-45dc-a01a-61ac7f132d9a,Human Resources Assistant III
+515,Mary,Hughes,[email protected],0cd4f230-a4eb-4f25-a867-802300c65981,Senior Financial Analyst
+516,Christina,Austin,[email protected],3d89a2c7-52bc-4f01-9e93-5986ffcb6671,Analyst Programmer
+517,Ronald,Kelley,[email protected],c39ce6a9-fe6f-4fff-9871-6e71cf923f17,Help Desk Technician
+518,Kelly,Kelley,[email protected],76f4eb39-32c6-4fae-a722-46fcfa8cbb84,Product Engineer
+519,Thomas,Cunningham,[email protected],a940a201-92d0-4f2a-b2bb-d35492773275,Programmer Analyst III
+520,Jimmy,Dunn,[email protected],6b841fa7-1f64-4f4e-bf70-99c002bacfa3,Systems Administrator III
+521,Kelly,West,[email protected],e6dc85f9-cdb0-4304-88fe-16248d6943df,Account Coordinator
+522,Lori,Gordon,[email protected],cfbcc973-e56c-4ccc-8370-6d5961ac10cd,Director of Sales
+523,Karen,Montgomery,[email protected],15e05632-397e-4243-8165-4d0ef0a0e0ca,Marketing Manager
+524,Billy,Graham,[email protected],36e433d1-1fe7-4a3b-a6d8-01ece8b26a35,Staff Accountant IV
+525,Angela,Ford,[email protected],fab48ac0-0b48-4158-8e28-8e5fd2c3edb5,VP Product Management
+526,Larry,Henderson,[email protected],c8918e01-5db1-47fa-93f9-143320d9dbda,Business Systems Development Analyst
+527,Jeffrey,Jones,[email protected],20082ee0-1afc-471e-969e-f8ee555a2198,Chief Design Engineer
+528,Russell,Stanley,[email protected],eb45703d-7ef9-4470-bf92-17750635047a,Staff Accountant II
+529,Wanda,Castillo,[email protected],d7035ccb-0cfb-44b1-a91b-c5aab4d06c08,Associate Professor
+530,Jonathan,Holmes,[email protected],5a84b37a-f2a6-4d83-a055-fe899b8bb640,Environmental Specialist
+531,Kenneth,Gordon,[email protected],cd82d8c2-44cf-4acf-a236-fefc24283615,Computer Systems Analyst I
+532,Nancy,Vasquez,[email protected],56573ce3-aa6f-45da-9724-4cb36ad79404,Automation Specialist I
+533,Maria,Warren,[email protected],304772be-cd90-4a08-817e-64f35a80ae79,Research Nurse
+534,Eric,Sanchez,[email protected],c58fc8e2-2c40-47a8-83b2-5dd525b7e863,Legal Assistant
+535,Joe,Spencer,[email protected],5e7a6ba2-a9fc-4ef8-bc6d-2280cc949c5b,Senior Financial Analyst
+536,Joseph,Sanders,[email protected],2520a9c7-a342-487a-91a1-1acd8b748a14,VP Accounting
+537,Jacqueline,Stone,[email protected],8811e9e8-6d12-484d-b38f-eb5814091743,Information Systems Manager
+538,Gregory,Harvey,[email protected],432edc27-6899-4ef8-a7da-5910596ce23f,Engineer II
+539,Philip,Freeman,[email protected],974dcb3c-6fc1-49ac-a546-0a8783a81372,Executive Secretary
+540,Timothy,Garza,[email protected],535ba8dd-4490-4946-8caf-30b66eb13f2a,Editor
+541,Melissa,Pierce,[email protected],adab1898-c965-46f1-8e05-40dfe1d20326,Civil Engineer
+542,Ashley,Myers,[email protected],6ec5f9d2-e319-49ce-895d-a9de82bfb1a6,Nurse Practicioner
+543,Nicole,Frazier,[email protected],7ec51691-2b02-4952-94ff-eded4cb20b81,Geological Engineer
+544,Jonathan,Lane,[email protected],20f4f812-f561-486d-840e-73fbc715d712,Help Desk Operator
+545,Wanda,Alexander,[email protected],01d1da75-20d8-4216-863d-a1443a0b1fec,Chief Design Engineer
+546,Alan,Lopez,[email protected],448d298a-ed75-4573-8378-36d6c03d8ff3,Health Coach II
+547,Lori,Richards,[email protected],9c1dabe6-cc27-4fca-a829-24836bc2845c,Help Desk Operator
+548,Bobby,Taylor,[email protected],1a02e534-7911-45e1-8ee5-f51a75f61d5f,Developer III
+549,Maria,Williamson,[email protected],0d8d3091-d88c-4ea5-a8bf-09fa51977a24,Product Engineer
+550,Jane,Oliver,[email protected],8b76234d-26fd-4da5-95da-9a26a4c669fa,Compensation Analyst
+551,Ronald,Frazier,[email protected],577c8902-6ef5-4f37-9c35-59b66af2dcb6,Automation Specialist I
+552,Angela,Elliott,[email protected],3142e55e-d714-4441-88a7-6cf58ae2f246,Office Assistant IV
+553,Lois,Gray,[email protected],b760951d-4ab1-483c-a26d-306bd3982f12,General Manager
+554,Jesse,Howard,[email protected],28f6aa12-b7c4-419f-b721-8de1feebfa94,Cost Accountant
+555,Henry,James,[email protected],b28593fb-c0cd-4ae0-9f63-be6024cd0b9f,VP Sales
+556,Charles,Brown,[email protected],9cddcd22-305d-4aa1-b2ca-852d423e5f62,Marketing Assistant
+557,Cheryl,Hughes,[email protected],fb90fc5f-a4aa-499a-82ce-7e134581847c,Information Systems Manager
+558,Wanda,Gardner,[email protected],71699419-b934-4f44-afe7-01017fa4f532,Nuclear Power Engineer
+559,Melissa,Hawkins,[email protected],5afafdba-29b4-410c-b8fe-c2a82588040c,Structural Engineer
+560,Albert,Payne,[email protected],9a72e845-4114-48d2-9aaa-7c36e13523c3,Software Test Engineer II
+561,Roy,Fowler,[email protected],be151018-a9c6-4e2b-bf4f-98f170773ef3,Engineer II
+562,Phyllis,Grant,[email protected],560dcfc6-6edf-4ed7-9800-c80eb2d7fd96,Data Coordiator
+563,Laura,Kennedy,[email protected],6c28d7a2-073f-4ad2-ba5f-a5bf2d385ad7,Associate Professor
+564,Eugene,Lane,[email protected],5d21fcd7-c5cc-4d59-8bc4-cb0ec872ed2c,Statistician IV
+565,Shawn,Garrett,[email protected],928d3c38-791a-4adb-8b6a-32ffb1349880,Senior Financial Analyst
+566,Ashley,Clark,[email protected],00e0aa94-466a-44f2-bda4-e44a6f6b276a,Geologist IV
+567,Irene,Stevens,[email protected],ade1e886-6dff-4220-80c8-f40b8e859db3,Environmental Tech
+568,Nicole,Stanley,[email protected],8b46baa5-5fbe-4dc3-9a89-12cc4b962a08,Physical Therapy Assistant
+569,Earl,Rose,[email protected],331a2a52-1686-4231-8a18-e57effba5b35,Payment Adjustment Coordinator
+570,Elizabeth,Oliver,[email protected],a2d18214-b367-419a-ba04-b3255803ef72,Human Resources Manager
+571,Samuel,Gonzalez,[email protected],25716072-6ee8-4cef-8c53-71ce063c6a66,Environmental Specialist
+572,Rachel,Phillips,[email protected],1f0d6f33-b88f-415c-98f2-18ac9e0298e8,Engineer IV
+573,Todd,Gonzales,[email protected],e3590676-05e1-4025-8207-4724a18b40a4,Help Desk Technician
+574,Ralph,Brooks,[email protected],10eb0d84-15a5-4d61-a519-d063ce81ca7b,Nurse
+575,Maria,Johnston,[email protected],6ab5f75c-1893-419e-a76a-5c142f821a5c,GIS Technical Architect
+576,Anthony,Patterson,[email protected],86f84f87-c68f-46d2-b975-ba8970d00bfd,Financial Advisor
+577,Sharon,Murray,[email protected],05c025a8-074c-4cd6-972b-ad257a1e24e6,Environmental Specialist
+578,Lawrence,Cole,[email protected],2b041d31-5c12-402a-84f2-3685c325aa03,Sales Associate
+579,Margaret,Collins,[email protected],ee3d13d5-25f0-4580-97a5-7ee45935b9eb,Help Desk Technician
+580,Edward,Moreno,[email protected],b99073c6-34ab-429d-80f1-8ca68124ddf7,Marketing Assistant
+581,Benjamin,Hughes,[email protected],1d9ae294-039c-47c8-a9c7-5fae08c5a7e3,Software Test Engineer II
+582,Laura,Bailey,[email protected],2aabcc82-3609-4603-bd3c-4e75ff30be57,VP Sales
+583,James,Payne,[email protected],90ca3c3d-5936-4144-b057-803dcf2028b0,Staff Scientist
+584,David,Snyder,[email protected],28e8933b-bee0-4cb1-9711-502223331be2,Food Chemist
+585,Brian,Webb,[email protected],16cb48c2-e281-45ed-a9a2-fa9379663e94,Structural Engineer
+586,Raymond,Hall,[email protected],2d4dac9f-0c75-4046-9819-7c9f8b7bd2bb,Health Coach IV
+587,John,Chapman,[email protected],0f7ec5a4-f4c9-43ac-8717-5e4031369080,Sales Associate
+588,Martin,Willis,[email protected],f19d94f8-07f3-4572-851d-b32f3a2a6985,Biostatistician IV
+589,Carolyn,Simpson,[email protected],5cdccda6-27aa-4530-ad06-7d9e04ae44b5,Assistant Manager
+590,Paula,Kelley,[email protected],471006f6-5e77-4947-9f4d-4df9425d133b,Registered Nurse
+591,Scott,Ramos,[email protected],6fc88144-066b-4f36-b095-3ce44ec09e96,Software Engineer IV
+592,Andrew,Little,[email protected],b80e867d-5026-447d-b416-17fa53a31179,Business Systems Development Analyst
+593,Tammy,Little,[email protected],51e83b4d-7c50-489b-b945-4f5fde60924e,Civil Engineer
+594,Martha,Pierce,[email protected],269b5c07-e870-4fbf-9c07-5f9a8a077073,Quality Control Specialist
+595,Kathy,Perry,[email protected],5268651f-0738-453a-b2aa-3834fae0ab59,Accounting Assistant IV
+596,Denise,Knight,[email protected],4121ac35-9e5e-4bc7-9fe1-d0d8e2f0355b,Administrative Officer
+597,Gerald,Mitchell,[email protected],d6c87734-433f-456f-a98a-9e862bf31c38,VP Quality Control
+598,Janice,Gordon,[email protected],81cd09c0-f5d5-4c7a-b64b-07838340e50d,Systems Administrator II
+599,Margaret,Miller,[email protected],9e99271f-3145-40f0-b74a-3713f68ef02f,Accountant II
+600,Tina,Hansen,[email protected],a930155c-aa65-4eb2-88fb-0061f9855c36,Programmer Analyst II
+601,Elizabeth,Hunter,[email protected],a28d83d9-ba4a-4f57-bee5-e42647ca64c1,Help Desk Technician
+602,Marilyn,Gutierrez,[email protected],6c9715f9-76a3-4bb6-977f-58c654bb3cdf,Information Systems Manager
+603,Cheryl,Crawford,[email protected],03369f48-d5b8-4159-a864-036d49b4b0fb,Geologist II
+604,Harry,Hawkins,[email protected],dee8079b-1fe9-45aa-84ec-5905c1b37be6,Human Resources Manager
+605,Patrick,Flores,[email protected],f3d33f6f-a3f8-4eb2-a176-d161fbc44ca4,Office Assistant I
+606,Linda,Rogers,[email protected],c8537236-b7b4-4634-9a8a-3fe8743f3766,Environmental Tech
+607,Gary,Rose,[email protected],4ea9a1e4-626e-4def-97d1-89b1bfd5bcb3,Programmer IV
+608,Carolyn,Carroll,[email protected],6df38b92-6bb3-4ba1-900e-241020b1304f,Dental Hygienist
+609,Jason,Russell,[email protected],1d944578-8366-46ad-a4fb-bca7491b218c,Programmer II
+610,Phillip,George,[email protected],d55ba608-bbf9-4752-88ab-fd2376c041d2,Safety Technician II
+611,Diana,Meyer,[email protected],dbbdecf1-437a-48e4-aa49-a04ff685aa55,Design Engineer
+612,Bruce,Cole,[email protected],a88f66ef-4fb6-43c2-8f67-56dc0aeac18b,Senior Quality Engineer
+613,Carol,Wallace,[email protected],33c290b5-5dd7-497e-838a-bed2bbbf8a61,Project Manager
+614,Katherine,Thompson,[email protected],a8bf4ba1-a741-477d-8b1e-4a3aead5c258,Junior Executive
+615,Jack,Frazier,[email protected],2c0b6c71-3950-45e8-a3c3-0240e45c02ac,Director of Sales
+616,Russell,Adams,[email protected],d0104c6d-88e7-4a96-bcb7-6302ec7e386d,Nurse Practicioner
+617,Pamela,Banks,[email protected],cd9056be-f20f-4cb1-b72b-172ebdc3a9b2,Analog Circuit Design manager
+618,Rebecca,Chavez,[email protected],87c0e213-31b5-4aea-81c1-afa7950f6201,Chief Design Engineer
+619,Willie,Peters,[email protected],8c201a8a-204b-48aa-b456-8df9b544bcfe,Design Engineer
+620,Robin,Cruz,[email protected],f6773198-a9b6-4718-9942-8d53a08f981f,Occupational Therapist
+621,Andrea,Bailey,[email protected],ca1b27aa-cfd6-4f80-8123-890e66204f43,Database Administrator IV
+622,Larry,Romero,[email protected],5154c223-f936-482b-85bd-6f7ef3254f15,Web Developer III
+623,Scott,Bennett,[email protected],a3cd093d-636e-421b-a05d-46a9409b8409,Cost Accountant
+624,Philip,Hicks,[email protected],8b578495-8b66-46bf-b165-667b5f574c8f,VP Quality Control
+625,Keith,Franklin,[email protected],9d612816-ffe4-47f3-811a-8dd97b49164f,Associate Professor
+626,Stephen,Sanchez,[email protected],fcccf790-4cd8-4c3f-9e67-7d8d70820327,Data Coordiator
+627,Beverly,Young,[email protected],121265bd-2174-42e4-88e3-4f3cd9e4ac86,Actuary
+628,Douglas,Berry,[email protected],7440078d-9aef-47b0-83ae-db74fcc5458f,Research Nurse
+629,Doris,Reid,[email protected],8f6a7415-466a-4f2c-b322-2590093b5dda,Recruiter
+630,James,Barnes,[email protected],d1fe9bd5-77b3-4dfd-9792-9d6ddf1ad099,Civil Engineer
+631,Samuel,Olson,[email protected],84183883-f842-49c6-9208-f40c9609a6d8,Office Assistant II
+632,Carl,Schmidt,[email protected],a65ef770-d4e8-43b9-b5bb-b213118a18f8,Database Administrator II
+633,Patrick,Johnston,[email protected],75392a99-e676-45f8-91f9-40ba1582975f,Structural Engineer
+634,Betty,Porter,[email protected],7512a1f1-2758-4e2e-a0fb-285e7d06ae22,Teacher
+635,Tina,Arnold,[email protected],b8a6a57f-27ab-4d21-bf1d-b948f096075a,Senior Cost Accountant
+636,Roger,Owens,[email protected],25b790a1-4ba1-428b-9a38-c6a3e15955ef,Information Systems Manager
+637,Betty,Reed,[email protected],a45ed233-ec57-4ee6-9a85-1b36477dd95c,Design Engineer
+638,Phyllis,Walker,[email protected],bd71a61a-9608-4a9d-9fc1-c5ea8ba3161b,VP Quality Control
+639,Todd,James,[email protected],275619ae-9448-4763-ac70-16fcec5c6de0,Accountant III
+640,Jessica,Olson,[email protected],699c5416-b01c-4c8d-ad9f-29e047a32df3,Associate Professor
+641,Benjamin,Baker,[email protected],8d769413-4778-4f8d-9e5f-b5c530f48d68,Accountant II
+642,Joe,Dean,[email protected],4450b9c1-7db0-423a-81c6-302f10d1953d,Administrative Assistant II
+643,Joe,Long,[email protected],7a49bf9f-b00d-4ad2-90d7-c6c8fcf5f9b9,Legal Assistant
+644,Matthew,Warren,[email protected],f52c6a54-c2fe-4b8e-acf4-711d6947030e,Structural Engineer
+645,Margaret,Burton,[email protected],f8e0470a-9376-431b-a27d-f5785e866dd9,Research Nurse
+646,Norma,Sanders,[email protected],2e6572fa-f697-430a-aa8f-da7203c7ab50,Cost Accountant
+647,Heather,Cooper,[email protected],c2928557-f2df-4d06-a793-8b702266819e,Pharmacist
+648,Steven,Burke,[email protected],5c40c37f-6905-42f8-b794-1f9bc4b2e1c1,Geological Engineer
+649,Peter,Gilbert,[email protected],d47ccc04-a167-42cf-9b18-aba1fce35499,Librarian
+650,Phillip,Mcdonald,[email protected],01e3de6e-1f97-4ce7-9cfb-0b6e80831c82,Environmental Specialist
+651,Wanda,Kelly,[email protected],a8559cdc-8e9b-4b62-8ce1-685310fd404d,Compensation Analyst
+652,Walter,Thomas,[email protected],591b1c40-977a-4a90-87fa-a818ea9b9e5a,Help Desk Technician
+653,Mildred,Flores,[email protected],bf6ed2c2-88eb-41c7-b95d-fc1b96291cc9,Editor
+654,Eugene,Burton,[email protected],62e58b54-49bd-4a3f-9ab5-2a39dcf6856d,Product Engineer
+655,Wanda,Thompson,[email protected],f1ccb21d-ab42-4ab3-b9c8-fee45de685fc,Human Resources Manager
+656,Theresa,Black,[email protected],5a5efb1c-3fc6-47ac-a739-d8a0d030697a,Project Manager
+657,Wayne,Russell,[email protected],4f22ac0e-3f38-4b6e-855a-26605e345a4a,Financial Analyst
+658,Jean,Dunn,[email protected],eb3538ba-fa09-4897-9c4d-c2ed15973b1c,Senior Sales Associate
+659,Bonnie,Powell,[email protected],fc901ddf-d10c-47e8-98d9-2d72f02a4f15,Mechanical Systems Engineer
+660,Sara,Perry,[email protected],26a9599d-3168-48a9-b994-901764830476,Nurse Practicioner
+661,Victor,Chavez,[email protected],40768684-3d36-4ace-95ba-980a7f922e40,Speech Pathologist
+662,Scott,Watkins,[email protected],3a64b26d-981a-48cd-bbf3-3529573f63f0,Senior Developer
+663,Sara,Wells,[email protected],70f9679b-695b-4699-bdfd-42179d3e451f,Financial Advisor
+664,Wayne,Nelson,[email protected],7f968dda-f945-4b50-aa6a-d05e1c354586,Product Engineer
+665,Johnny,Lawson,[email protected],e263bb08-5e75-454c-96b7-5965f131028e,Actuary
+666,Michael,Morrison,[email protected],f3e042e6-cf56-46e9-b934-1b8d50488528,Biostatistician IV
+667,Ryan,Welch,[email protected],c11804fd-c8b5-47e8-8b4e-0fb9f06bcbeb,Biostatistician IV
+668,Sharon,Fowler,[email protected],fce16049-5a59-45d5-bb4c-7e43eb9ed6b3,Project Manager
+669,Louis,Lawson,[email protected],f06cb46e-de25-4661-89ee-48d3c5a9896f,Account Coordinator
+670,Barbara,Pierce,[email protected],d0f5659c-595e-4cad-b202-4c46f4145009,Analog Circuit Design manager
+671,Maria,Romero,[email protected],543decf0-b068-42ae-8e49-66837dfc7c6d,Help Desk Technician
+672,Deborah,West,[email protected],3aa98a01-a6d3-4500-931a-b4f4487dd634,Recruiter
+673,Nancy,Chapman,[email protected],081abb72-2794-4cb7-a886-081ceb453512,Analog Circuit Design manager
+674,Betty,Mccoy,[email protected],640b51d1-245d-42f1-98ea-72410e884293,Clinical Specialist
+675,Cynthia,Wright,[email protected],0a249c81-0862-4eb3-abf6-0ed0427a6cc2,Human Resources Manager
+676,Gary,Richards,[email protected],f3d3efca-c11a-43af-ae83-02e7992c86c2,Director of Sales
+677,Kimberly,Arnold,[email protected],3c24ceb9-f2f4-48c5-a291-951921b3226f,Software Consultant
+678,Amanda,Matthews,[email protected],4cd41d4d-677a-48a4-9285-24f174621570,Biostatistician I
+679,Donald,Brooks,[email protected],0d8dab0b-a5b6-449a-ba0c-ac35dc79c056,Speech Pathologist
+680,Keith,Frazier,[email protected],c87b7933-7b48-4410-9363-77e98cdc6e71,Software Test Engineer IV
+681,Fred,Arnold,[email protected],ccd3e0be-50fd-4c7a-86ad-bcb77cbec138,Senior Financial Analyst
+682,Emily,Torres,[email protected],5ad292cf-f917-447d-b830-496b5b63d8c6,VP Sales
+683,Robin,Marshall,[email protected],ea838d58-2be1-407d-9271-6e7e78266b72,Cost Accountant
+684,Matthew,Green,[email protected],2eae81bc-2757-4d9a-84c9-d5fbaae91e03,Engineer I
+685,Cynthia,Garcia,[email protected],b1bc11b6-4be7-42ed-9dae-955edac2d485,Dental Hygienist
+686,Jack,Bryant,[email protected],9c7dde81-2167-4fe7-a690-9ee60736b4bc,General Manager
+687,Angela,Garcia,[email protected],eb69204f-1ae5-4337-a132-669100319e39,Pharmacist
+688,Angela,Ferguson,[email protected],f3094a54-72d7-4222-b44f-daf3ca246d0c,Environmental Tech
+689,Brandon,Webb,[email protected],cc812f96-2db6-48b0-8967-f6f75d0f9389,VP Marketing
+690,Terry,Gilbert,[email protected],ace37faf-8295-4c63-a537-0204634c984b,Account Representative III
+691,Margaret,Simmons,[email protected],40fe5212-29fb-45d0-90e9-c7b6ee3aaca2,Software Test Engineer III
+692,Lois,Butler,[email protected],fda57935-2e64-473c-b047-2c75f4a9a1a6,Staff Accountant II
+693,Doris,Chapman,[email protected],ed4d7086-da35-4703-b008-5995bcbfe58c,Account Representative I
+694,Patricia,Fuller,[email protected],44f50dfa-acd8-43e4-9123-8ab048e71e1b,Database Administrator III
+695,Phillip,Martin,[email protected],d680f320-c922-41eb-88f1-2a26a030957b,Associate Professor
+696,Gloria,Fields,[email protected],ee15e112-81eb-455f-8df6-5ce9739079da,Accountant I
+697,Diane,Ortiz,[email protected],38a1d4be-9901-4894-b1d8-bd1c94904ed6,Mechanical Systems Engineer
+698,Frances,Lopez,[email protected],84bb185e-625b-48fc-9d0b-daa3d11e5543,Clinical Specialist
+699,Lois,Garza,[email protected],2227e557-a4bf-46fc-95a9-94ef7c612454,Senior Developer
+700,Susan,Pierce,[email protected],4259c5bb-1bcc-4c66-921b-f2cdaefd6186,Professor
+701,Ernest,Porter,[email protected],f12194c1-cdb2-4446-85a0-d2daa9c08666,Speech Pathologist
+702,Pamela,Spencer,[email protected],8ba80cfc-f86f-4c1a-add9-66ee77fb3238,Graphic Designer
+703,Heather,Fisher,[email protected],004a915d-4fad-4f37-9042-befac8dfd531,Accountant I
+704,Andrea,Dixon,[email protected],c6eea9d4-2908-4fef-9a18-06ce74a7d20c,Dental Hygienist
+705,Christine,Austin,[email protected],715c737c-9037-4ce2-9bc6-82f6d8f25f75,Design Engineer
+706,Peter,Spencer,[email protected],4c878bcc-7b20-4913-9dbb-807de7c589fb,Software Test Engineer IV
+707,James,Barnes,[email protected],bf1f69d6-0b6c-4611-ba82-2a09fefeac02,Engineer I
+708,Paul,Woods,[email protected],f132a8fa-8e46-4a16-98ce-af2b4c21a632,Accountant III
+709,Timothy,Meyer,[email protected],5d77ea07-dfe8-40e6-be11-896f28a7bb7c,Chemical Engineer
+710,Charles,Lopez,[email protected],440961ab-d26a-4526-944c-a0b2f34c7c41,Community Outreach Specialist
+711,Jonathan,Stanley,[email protected],72a9ffae-1988-4ba5-b403-9caee7195a95,Marketing Manager
+712,Anthony,Flores,[email protected],19af9bc3-b74b-4357-8c14-ce1dcf6d97f6,Programmer IV
+713,Gary,Richards,[email protected],220b60da-0477-41ed-a843-727cf1ec79a6,Office Assistant IV
+714,Mark,Austin,[email protected],54c51d3f-c937-416a-8d86-7be2527049c4,Media Manager II
+715,Benjamin,Rogers,[email protected],6a94cb47-144f-4c4a-90f1-c6efb31a0249,Professor
+716,Randy,Bradley,[email protected],8485b884-3c86-4937-a9e0-7a61fd5e0450,Budget/Accounting Analyst III
+717,Andrea,Richardson,[email protected],62785464-0035-45fe-a2cd-668459fd9abc,Teacher
+718,Christopher,Parker,[email protected],5dc67a75-d25c-48cc-a160-64ab7992ce7f,Biostatistician III
+719,Antonio,Kim,[email protected],8816ec4a-3f13-4cd8-94ea-5f1884010ffd,Associate Professor
+720,Kelly,Lopez,[email protected],6b7a0cdc-9a1e-4896-ab68-d304f1339510,VP Product Management
+721,Elizabeth,Kennedy,[email protected],3c0b5454-3931-4d59-b568-e9dac38201a5,Senior Editor
+722,Marilyn,Taylor,[email protected],109f79b1-5738-4b77-be8c-8e49977497bd,Graphic Designer
+723,Rose,Gonzalez,[email protected],ae309aa9-49aa-4994-9d92-4787a551ac9f,Payment Adjustment Coordinator
+724,Maria,Marshall,[email protected],25a10392-6551-4998-a5f9-7e8c618e4e5d,Software Test Engineer IV
+725,Theresa,Evans,[email protected],a14acc20-56eb-4a42-980b-1b3e4e9568a8,Engineer III
+726,Amy,Greene,[email protected],18b57487-c414-4147-8aa2-cf8503bb9032,Sales Representative
+727,Arthur,Warren,[email protected],86abb4b0-d417-4c04-925d-da63fbc1feb9,Geologist IV
+728,Gerald,Olson,[email protected],f2438df5-de54-4c35-bfcf-8ff4ed8b6531,Electrical Engineer
+729,Ann,Watson,[email protected],20fd66d4-6ff2-4bc6-bebd-c25200d4b540,Media Manager II
+730,Louis,Flores,[email protected],9615d25e-1d17-4c30-a1bb-5bf6b28f286a,Marketing Manager
+731,Aaron,Fuller,[email protected],7131dd3b-467f-4d4c-a112-9e135168f76f,Accounting Assistant I
+732,Ralph,Stone,[email protected],2a3005c2-13f2-4876-b6d3-118368602dca,Senior Financial Analyst
+733,Ruby,Cruz,[email protected],ff1677e7-ae46-40cc-a048-a4a4140c7378,VP Quality Control
+734,Jeremy,West,[email protected],e4af11b6-93fb-4786-aad1-96083109b955,Recruiter
+735,Johnny,Long,[email protected],dcc309c9-af2a-4ad6-b98e-d5d450729071,Accountant IV
+736,Phillip,Garcia,[email protected],51af84d3-83cd-45f6-ac4b-f8099f2a52a2,Geologist I
+737,Patrick,Bailey,[email protected],9836e4d5-824e-4f5d-a9e4-268c41006c32,Engineer III
+738,Thomas,Frazier,[email protected],23f6d980-ba9c-4ca3-9417-2bd3e2b02aec,Professor
+739,Benjamin,Ramos,[email protected],4a97809c-685e-4d86-bc84-3ddf380daf62,Research Nurse
+740,Mildred,Brown,[email protected],838f8168-64c6-4645-83da-831be20c0596,Structural Engineer
+741,Angela,Riley,[email protected],0dc9f421-4b24-435e-a0b1-b4f41399d7a6,Senior Cost Accountant
+742,Frances,Chavez,[email protected],7b1a1099-f655-4b4c-92d9-7365e0d68da0,Software Engineer III
+743,Donald,Spencer,[email protected],c2799755-449b-4600-b003-5c9e4695bc1d,Associate Professor
+744,Craig,Franklin,[email protected],b503046b-79d2-4800-b042-69169e2a85af,Tax Accountant
+745,Mildred,Holmes,[email protected],b0fe7904-6836-4162-ba27-4e28a13ba7a3,Tax Accountant
+746,Norma,Nguyen,[email protected],5271bb56-9e86-4d39-8149-6994e0307790,Actuary
+747,Albert,Ramirez,[email protected],fb84ac2b-2583-427e-8ee0-966ede791978,Accountant IV
+748,Rebecca,Dunn,[email protected],06f0fc7a-5ec2-49b5-8a58-8d396a8fa254,Budget/Accounting Analyst I
+749,Anthony,Alvarez,[email protected],01936772-acfe-42af-8a2b-21223a5ff240,Recruiter
+750,Kenneth,Gonzalez,[email protected],860aa359-ef04-4282-89de-b4b0e28b2382,Staff Scientist
+751,Jane,George,[email protected],c9f3f957-5667-4deb-8a4a-3a3e0a3d3192,GIS Technical Architect
+752,Roger,Gray,[email protected],166d9522-61d3-4b3b-81fc-6700e41b414c,Senior Editor
+753,Brenda,Collins,[email protected],351340a8-f938-4136-91b8-0839e90d3f7a,VP Product Management
+754,Howard,Elliott,[email protected],ddd6c3d0-3fe6-47df-95a4-cea1103c2e65,Web Developer III
+755,Arthur,Carter,[email protected],62ef1c7c-2075-4aa4-ab0c-5d75081f25cb,Nurse Practicioner
+756,Bruce,Torres,[email protected],c6d0befa-22f8-4644-8a54-9a7afedf1352,Analog Circuit Design manager
+757,Jeremy,Day,[email protected],378f9d82-e3ac-492f-89b2-f63e8c3fb6d5,VP Marketing
+758,Gary,Weaver,[email protected],e63be6f1-c19b-4448-9443-1558644aa078,Technical Writer
+759,Earl,Reed,[email protected],2e162559-1cac-487a-83d2-c67edf6a4854,VP Marketing
+760,Cynthia,Burke,[email protected],32f8bb42-5e10-4353-9d24-6e865a94b03e,Cost Accountant
+761,Fred,James,[email protected],2d06e5c5-19e5-4943-a6cd-7ee45f818009,Pharmacist
+762,Jose,Fernandez,[email protected],723d814d-a5c7-45be-85ce-ec467a01b20c,Financial Analyst
+763,Wanda,Ramirez,[email protected],1b88b022-ef17-4d26-a14c-81adcade9243,Nurse
+764,Teresa,Griffin,[email protected],59e80099-ca71-4a29-beaf-a402139fe696,Software Test Engineer IV
+765,Walter,Reid,[email protected],de01891e-3f57-4184-b4c5-979e70c8ef09,Analyst Programmer
+766,Raymond,Fisher,[email protected],58f6f7e2-6a19-4a70-a6a9-e07b958082cf,Automation Specialist I
+767,Samuel,Hicks,[email protected],2be3fe9d-1d3d-4270-9662-e20b10cb31b8,Recruiter
+768,Ruth,Bowman,[email protected],a4939666-3adc-444d-a218-74ea448c50f2,Software Engineer II
+769,Lillian,Young,[email protected],0009bebb-3c37-4bd2-a164-8998449c6da8,Sales Representative
+770,Juan,Grant,[email protected],2cefdff5-49c7-47c9-9e73-cbbbb89ac11c,Computer Systems Analyst III
+771,Heather,Harper,[email protected],cddc9104-4354-41c8-88ae-0fb1781d18b0,Budget/Accounting Analyst I
+772,Terry,Flores,[email protected],0407d983-1f33-4784-aa2d-f5c3218fc6ba,Director of Sales
+773,Frances,Moreno,[email protected],c21de126-4072-4224-ba5c-bbe9126d9865,Junior Executive
+774,Karen,Harvey,[email protected],103ea061-ec96-4c99-813a-c7824a9976ab,Actuary
+775,Lawrence,Vasquez,[email protected],fb0c4343-b3dd-4136-b13d-72ea9cffe06f,Mechanical Systems Engineer
+776,Christina,Reid,[email protected],86097cf9-edef-4638-ab1c-d5b0edc0d294,Account Executive
+777,Sandra,Vasquez,[email protected],faa7b691-437a-48f6-a182-3028cf5cceb2,Director of Sales
+778,Angela,Mendoza,[email protected],635a441f-fb8a-4486-b175-5a066135ca20,Nurse
+779,Sean,Oliver,[email protected],ea298aa5-f8cd-45e0-849c-e14db8f02d01,Nuclear Power Engineer
+780,Brenda,Shaw,[email protected],3b6f0dc4-1246-4762-9689-40bbbd3eb4bc,Civil Engineer
+781,Howard,Riley,[email protected],e3cde2a6-b2dc-40be-8cf9-cd0558f926ee,Research Associate
+782,Amy,Morris,[email protected],70a3ea1f-4409-42a0-aa11-63e5812ba1af,Analog Circuit Design manager
+783,Kathy,Payne,[email protected],44030c1b-29a1-4c20-b3ac-7f9b40f0854e,Assistant Professor
+784,Keith,Patterson,[email protected],49b1a436-a70e-4b92-b58c-91b7f71bfd58,Occupational Therapist
+785,Willie,Gardner,[email protected],7d5bb5e2-2d8d-451d-a165-6359ff3b608a,Internal Auditor
+786,Cynthia,Cox,[email protected],53bae210-8fb0-434b-b648-d5f388b5a541,General Manager
+787,Sharon,Burton,[email protected],baab1c6b-f575-44e8-8045-703f09168273,Geologist II
+788,Carlos,Romero,[email protected],4c366d1b-d139-4cdf-9428-c5ea4db0b235,Analyst Programmer
+789,Janet,Marshall,[email protected],d7f454c3-e210-4e51-9705-b4b60fda25a6,VP Marketing
+790,John,Hernandez,[email protected],fcfad5ce-3803-483d-a212-60d10273b6f8,Web Designer II
+791,Craig,Andrews,[email protected],8f86db8c-f324-4438-aa5c-826ed42ed169,Web Designer I
+792,Roger,Henderson,[email protected],ae50386c-3de1-42fd-9eff-22d599def4a6,Assistant Manager
+793,Anne,Lynch,[email protected],65ada794-760a-49fe-a699-bb84e6deb06b,Senior Financial Analyst
+794,Emily,Gardner,[email protected],c33a2e4d-2624-4bc4-8b3c-401a44291128,Safety Technician II
+795,Keith,Lewis,[email protected],04a20cc0-18f9-4e61-afdd-94a209c7cc75,Tax Accountant
+796,Henry,Adams,[email protected],f91674de-a946-43da-a44c-c871dbf779b5,Chemical Engineer
+797,Rebecca,Weaver,[email protected],7ba98957-3413-4351-9c78-8d04b204b7b4,Web Developer II
+798,Johnny,Fernandez,[email protected],5db930ba-07f7-47f8-b653-94d5d9af8db4,Pharmacist
+799,Elizabeth,Ryan,[email protected],48819295-4599-48a2-90e7-6553fc779e54,Project Manager
+800,Roger,Carter,[email protected],31178064-94dc-4124-ad18-6406b15ce8ba,Technical Writer
+801,Debra,Hamilton,[email protected],cbdcb253-dd2c-4703-aced-ead73fb224f4,VP Accounting
+802,Amy,Stewart,[email protected],61dee0fb-03c1-4438-bb76-fc62f89f8fd6,Environmental Tech
+803,Rose,Morris,[email protected],e248f307-e7d7-45d5-9b00-5edc608d68ce,Administrative Officer
+804,Michelle,Gibson,[email protected],4ad6438e-5f48-4f3e-9645-713215ab1703,Environmental Specialist
+805,Sarah,Gutierrez,[email protected],2fad4c52-9ccc-4a5c-b0b8-f8a444144a91,Dental Hygienist
+806,Joyce,Rose,[email protected],6c0e41e7-6654-413a-807b-e5d589a83a1c,Software Test Engineer IV
+807,Christina,Kim,[email protected],b547feb4-de93-4521-ab77-f5a06555d771,Database Administrator I
+808,Susan,Bryant,[email protected],938763a3-fdd3-416b-8bb3-d91b00ee19f9,Financial Analyst
+809,Charles,Berry,[email protected],a10a26f8-73b0-4920-a08d-f09c4a65f426,Physical Therapy Assistant
+810,Maria,Brooks,[email protected],91bb46c1-717e-49df-8071-48af042f2530,General Manager
+811,Joe,Daniels,[email protected],bfb36274-a4a8-493a-9ac4-10a53e8677d0,Analyst Programmer
+812,Fred,Campbell,[email protected],38e937ab-88bf-4d19-8004-9ff34f5f8d1f,Electrical Engineer
+813,Anne,Moreno,[email protected],09d7477d-d543-491b-80b0-44fc7f16bd1f,Mechanical Systems Engineer
+814,Norma,James,[email protected],82109907-5c5e-46e5-90a0-8c9370b3b997,Tax Accountant
+815,Diane,Gilbert,[email protected],6074c8d8-238d-4b0d-a0da-2156f2e1f3d3,Accountant III
+816,Ashley,Johnston,[email protected],73d342cb-cad8-4d3c-84df-e3eacb093368,Professor
+817,Carlos,Mendoza,[email protected],c200dbec-78eb-4ca2-aeb4-5d0d7345a3f7,Teacher
+818,Katherine,Tucker,[email protected],fa137b32-6f98-4f12-8e85-844067c74020,Assistant Professor
+819,Kenneth,Daniels,[email protected],313c33b3-9535-475a-a429-64e92424ff1f,Environmental Tech
+820,Evelyn,Rivera,[email protected],7456ce23-a6a4-4f0e-9f22-c2ee437f1b91,Chemical Engineer
+821,Joseph,Ryan,[email protected],c141b3e2-1787-42a3-890c-1f453825ef6b,GIS Technical Architect
+822,Richard,Adams,[email protected],259ddecd-26c1-4f4f-b83b-c00a4854d458,Senior Editor
+823,Charles,Boyd,[email protected],5e0d6e20-5183-4a91-b124-85565d08690b,Librarian
+824,Frances,Stevens,[email protected],24d8ca8d-4039-49df-ae7c-9bd209b57e40,Automation Specialist III
+825,Mark,Richards,[email protected],2cdc469d-ba68-445d-ac53-22261e577af6,Business Systems Development Analyst
+826,Martha,Grant,[email protected],f894dd23-996c-4f54-aabf-0a1b4acc5cee,Compensation Analyst
+827,Andrea,Nelson,[email protected],84b3fd67-6c31-4190-9a5b-48be0032a9fb,Health Coach III
+828,Anthony,Larson,[email protected],29c3662e-d65d-4ce5-97c9-8acdf5e87744,Quality Engineer
+829,Anna,Mendoza,[email protected],54331e26-1fbf-4495-9f5f-61c5134dc8ce,Biostatistician II
+830,Paula,Parker,[email protected],472f0617-3b3b-4bef-8787-7c2504b12ae0,Design Engineer
+831,Diana,Nelson,[email protected],04a385e0-89b8-4fcb-9c76-bc61da279449,Technical Writer
+832,Nicholas,Meyer,[email protected],c3c8c032-9c73-4cd9-a1cc-12ee3400abdb,Environmental Tech
+833,Barbara,Johnson,[email protected],4d402ded-d1f3-48a6-9160-a9552f21a232,Dental Hygienist
+834,Carol,Gardner,[email protected],9a4f9c0d-a765-463e-94c1-13bd21166ba0,Data Coordiator
+835,Judy,Woods,[email protected],f4586b56-8c73-4406-82a3-ce0a377ac7b5,Paralegal
+836,Irene,Murray,[email protected],be8d0f4a-f9a0-4da9-bda3-f521bf5f69b1,Human Resources Assistant I
+837,Justin,Stevens,[email protected],ae1624d5-113a-423d-afb4-e1032486d66a,Statistician II
+838,Carol,Carroll,[email protected],709d6340-97c3-4893-8a95-88445b847044,Environmental Specialist
+839,Harry,Parker,[email protected],051d2008-decc-4b1f-abc0-04793f38aecb,Human Resources Manager
+840,Ashley,Gonzalez,[email protected],95a93e71-2f80-4e41-8e99-fc1b60ce6b5c,Sales Associate
+841,Anthony,Miller,[email protected],8cdd40f6-5b81-4201-8982-e1e27203801a,General Manager
+842,Roger,Riley,[email protected],8ca355b9-4545-4317-a973-77d97dc6de56,Physical Therapy Assistant
+843,Victor,Harrison,[email protected],287a1f37-568c-471b-88e0-6b15634570e4,Quality Control Specialist
+844,Debra,Marshall,[email protected],630f3bf3-a92d-498c-9746-0a4738d1b766,Developer IV
+845,Lawrence,Romero,[email protected],65910df7-776b-4884-bf6a-6f337cfc738b,Legal Assistant
+846,Kimberly,Franklin,[email protected],f3db74ee-fa56-40b4-b95c-81b8f8b7030f,Cost Accountant
+847,Bonnie,Williams,[email protected],e955bce7-f018-408b-9578-04155d3e2f76,Occupational Therapist
+848,Judith,Knight,[email protected],63164cc7-8fcc-42af-bde8-de16cc9bcc36,Clinical Specialist
+849,Tina,Hernandez,[email protected],87b34ac4-3ef3-40f4-b784-738f8c04d26e,Payment Adjustment Coordinator
+850,Eugene,Harvey,[email protected],810b1a7d-3351-412a-b089-05202b18c7e2,Business Systems Development Analyst
+851,Patrick,Willis,[email protected],20ae3694-97f4-44cb-952c-29ea18d16b52,Budget/Accounting Analyst III
+852,Karen,Alvarez,[email protected],85cfe57d-792a-4495-9579-a30ba5af9b26,Graphic Designer
+853,Denise,Webb,[email protected],560b5d68-bcbb-45f5-aa02-f2763c616414,Human Resources Manager
+854,Jeremy,Romero,[email protected],cbab6305-f295-4849-8934-9f20e71edadb,Internal Auditor
+855,Jason,Greene,[email protected],502841d3-81ce-4662-a3ff-0a29a3f8bf29,Office Assistant II
+856,Donald,Clark,[email protected],fd231ae7-a5b4-41fe-bb46-5e5b403c1fec,Tax Accountant
+857,Phyllis,Ruiz,[email protected],1db56e08-30c5-4e43-b1ad-82bb6dc246ba,Accountant III
+858,Annie,Wells,[email protected],8c44a508-d873-4622-99f4-628f9c0fc781,Technical Writer
+859,Ann,Freeman,[email protected],d7a24eb9-a09b-4e1b-ab64-01701aad9405,Chemical Engineer
+860,Benjamin,Lopez,[email protected],ab894e06-8db5-44cc-8b06-9bd7e32e6080,Account Representative III
+861,Douglas,Coleman,[email protected],f16c43c5-b51e-410f-9e77-f2bb79370228,Environmental Specialist
+862,Jerry,Ruiz,[email protected],9e9d29c0-5bbb-4a06-9b12-6b276f39ab1b,Systems Administrator III
+863,Jessica,Reyes,[email protected],c9bfa04c-843f-4c51-a8b8-dcf4744ca2ec,Legal Assistant
+864,Mark,Robertson,[email protected],7b9a04f6-4ca3-4c9a-9add-cf51af4de3d0,Paralegal
+865,Laura,Armstrong,[email protected],43866f86-efda-4227-959d-5a591a7c6b32,Software Consultant
+866,John,Kelly,[email protected],aa055e6b-3e2d-437f-ae6b-71348d590c9b,Office Assistant III
+867,Victor,Willis,[email protected],5cba52b0-7487-4233-9ef0-43e0a45e79ec,Accountant II
+868,Bruce,Freeman,[email protected],32fbab74-6781-49e5-b00c-129ad56c95ff,Budget/Accounting Analyst IV
+869,Kathryn,Fox,[email protected],dfe42aa9-c486-4a0c-aafd-d1c2e9c319f4,Structural Analysis Engineer
+870,Jack,Lee,[email protected],15ccfaca-bc5c-4c2f-8048-0240a88d70bf,Clinical Specialist
+871,Roy,Fields,[email protected],d2c059c8-8b15-4055-b8f1-4c18ac87233e,Administrative Assistant III
+872,Robert,Baker,[email protected],82b8b711-088c-4ccb-a566-361716059387,Associate Professor
+873,Walter,Lawrence,[email protected],fbf736b3-a98b-42fe-a43e-df8047bfdee3,Nurse
+874,Sarah,Young,[email protected],ca76c593-f236-4f4c-8c28-7e440c3bbb5c,Office Assistant II
+875,Amanda,Fields,[email protected],8dab30fa-e5a7-42c2-9aa0-7a84da8f9bc8,Administrative Assistant III
+876,Teresa,Pierce,[email protected],79f5d988-e325-4c85-ade2-01f78f1e600b,Media Manager IV
+877,David,Coleman,[email protected],cd832f4f-10c9-4c4f-8dcd-2ca239158dce,Sales Associate
+878,Catherine,Johnson,[email protected],5976e46d-0e90-4fa5-8eac-9528db27e117,Community Outreach Specialist
+879,Shawn,Ellis,[email protected],0b705501-afd3-4d20-ac8c-9b487754f1ef,Graphic Designer
+880,Adam,Burke,[email protected],d7035e9c-874b-42e9-b30d-030ccbed24f5,Editor
+881,Kelly,Ellis,[email protected],ef3c0010-b146-42cb-a003-c5cee68d028e,Recruiting Manager
+882,Mark,Grant,[email protected],31796961-86f0-4689-8eb6-0b63a13d7356,Sales Associate
+883,James,Roberts,[email protected],8dbee7ef-cc94-41a1-843d-af0f3d67084f,Geological Engineer
+884,Brandon,Adams,[email protected],48f32843-7e8b-49e8-b98d-134ac4dacc31,Desktop Support Technician
+885,Jonathan,Wells,[email protected],56b305cc-20f0-40a9-b987-84db0e1ea49a,Budget/Accounting Analyst I
+886,Janet,Martin,[email protected],87006549-0a6c-4e26-8b6c-654111a45402,Director of Sales
+887,Carl,Morris,[email protected],45d2db42-aaf7-4e18-a5b0-a49251546bcf,Sales Representative
+888,Karen,Wright,[email protected],a4435386-1e6f-45d7-9897-56024f38a77d,Account Coordinator
+889,Carl,Martinez,[email protected],14e4f40d-7f68-422b-a931-8698b8487e7a,Compensation Analyst
+890,Harry,King,[email protected],5fcbbfc0-fad7-42ba-90c7-ad052a94e68a,Accounting Assistant II
+891,Raymond,Mason,[email protected],cb0e97d3-c062-4ed5-9ee6-fbe1d9a8fa99,Quality Engineer
+892,Chris,Armstrong,[email protected],0033d80b-3adb-4e51-9ace-e9d18b7e7f4c,Geologist III
+893,Philip,Garcia,[email protected],2cce92d1-d241-4cc0-8ed8-d1dfa6dc7a75,Analyst Programmer
+894,Marilyn,Perez,[email protected],2f4ad84a-2c46-4560-a013-e7717aef8cb6,Geological Engineer
+895,Fred,Fox,[email protected],e43988d3-7601-4ebd-b4bd-375cd6993978,Associate Professor
+896,Anna,Brown,[email protected],b7314598-731a-48f6-8636-e640b0c0cacd,Senior Quality Engineer
+897,Victor,Stevens,[email protected],17d26e95-9aa7-443e-a5f1-a975d8b30f79,Programmer Analyst III
+898,Louis,Torres,[email protected],d1bf8fdc-00a8-4144-87b6-5f0209a37b02,Senior Sales Associate
+899,Kathryn,Lopez,[email protected],6e7d346b-d47c-4928-9b31-e7e2d5a4d86e,Community Outreach Specialist
+900,Virginia,Coleman,[email protected],c99459bb-80c2-4aa0-8c14-286e6ead89c0,VP Product Management
+901,Albert,Lynch,[email protected],2e0c1d36-d3fc-4e4b-a290-5f15efd1d955,Marketing Manager
+902,Angela,Knight,[email protected],6c59b42d-87d5-4157-a9eb-84f9092486f3,Staff Accountant I
+903,Donald,Chavez,[email protected],4216adf7-bb7c-4474-a07c-b5863a4a371f,Marketing Manager
+904,Susan,Ramos,[email protected],54748dc5-2f58-4ff5-a4b1-dac637ed36fa,Biostatistician III
+905,Frances,Arnold,[email protected],2adc5562-8064-49f2-a249-f848fe99337c,Physical Therapy Assistant
+906,Judy,Pierce,[email protected],3f12806a-a2dc-47ed-91df-cba78de735ce,Help Desk Operator
+907,Tina,Ross,[email protected],8c2b983a-a3a1-4417-ba53-77671b658168,Environmental Tech
+908,Roy,Reed,[email protected],a4bd95e8-4c07-4197-8096-641ca1c3e657,Engineer I
+909,Louise,Sanchez,[email protected],81778d5b-8708-4e62-9321-f6a09126a540,VP Product Management
+910,Beverly,Richards,[email protected],e8170426-317e-427f-94fa-73db8bff680b,Administrative Assistant I
+911,Sara,Hansen,[email protected],a678c74c-d71a-4988-a7b9-782bae53b326,Biostatistician I
+912,Pamela,Evans,[email protected],eee086e5-8c1e-4b31-957c-37cf0b880434,Desktop Support Technician
+913,Maria,Lawrence,[email protected],5427ff3e-076d-4a73-b6df-57954b7d38c1,Electrical Engineer
+914,Edward,Medina,[email protected],b81dc7e5-342f-4b3b-8a6a-b23ac7c20429,Occupational Therapist
+915,Patricia,Green,[email protected],11ec182b-caeb-41a9-a011-15d9d71cd886,General Manager
+916,Carolyn,Gutierrez,[email protected],3926c79f-a2c0-4dde-a75e-2fa06e74e15a,Director of Sales
+917,Debra,Hawkins,[email protected],621dfbd4-d1bc-4e39-afb6-a7d67b1b3f09,Civil Engineer
+918,Frances,Larson,[email protected],7ef1416e-c1bc-41c5-8d29-af5e3937baca,Help Desk Technician
+919,Margaret,Watson,[email protected],093aa4f6-1510-4a63-b3ed-e93e4251fb3d,Executive Secretary
+920,Roger,Gordon,[email protected],2cc9c711-73c4-4a4b-976f-dd276f7aa264,Marketing Assistant
+921,Jesse,Dunn,[email protected],08bd74fc-c9a0-412b-9f4c-fb51a5518697,Media Manager III
+922,Carl,Gonzalez,[email protected],19c2bad0-3e4e-4f30-84b7-8cf1d9935c81,Senior Quality Engineer
+923,Jane,Morris,[email protected],19b16c8e-a81d-466b-8479-66e0dbee2893,Mechanical Systems Engineer
+924,Mary,Elliott,[email protected],20b7ccc3-905f-461c-a520-ad8583ca65eb,Teacher
+925,Charles,Duncan,[email protected],d29f34d4-9ef0-41db-b0af-cc07443d1191,Administrative Assistant IV
+926,Samuel,Brooks,[email protected],4a6bead0-94c8-42b9-9617-4b05db8a937d,Project Manager
+927,Karen,Hunt,[email protected],1c7d63d3-a248-404f-aaeb-d998a4471ded,Automation Specialist III
+928,Jimmy,Stone,[email protected],f090ed6f-22ad-49b1-9326-16b5a30c3861,Geological Engineer
+929,Randy,Scott,[email protected],ad4747df-d59e-4c73-bc7a-a54280a86f74,Analyst Programmer
+930,Johnny,Gilbert,[email protected],c92c6039-2f83-4470-96fe-73740902f7cf,VP Sales
+931,Donald,Parker,[email protected],59a8b113-0cf8-46ab-9273-60adef7969ad,Operator
+932,Samuel,Day,[email protected],d4525cc6-edfe-49da-bcd5-9cbb8f62b79a,Sales Associate
+933,Dennis,Campbell,[email protected],439e1fe8-d710-41ff-a9f2-95efc4e7ab81,Teacher
+934,David,Knight,[email protected],3f0ff8d9-8f09-4b22-a292-8d5785ae8e23,Budget/Accounting Analyst IV
+935,Brian,Riley,[email protected],5c7859cc-35d0-4db2-abb7-9142d7a02cb9,Senior Cost Accountant
+936,Walter,Richards,[email protected],2e66e5d8-bf4a-4b46-9cde-10945fc2606d,Help Desk Technician
+937,Bruce,Scott,[email protected],75b4beba-cd6e-475e-816c-2166198dbfb6,Administrative Assistant III
+938,Kenneth,Johnson,[email protected],809bbf70-5316-4647-b47f-b40b7b41c632,Registered Nurse
+939,Ruby,Green,[email protected],3c31ce43-f4ae-4eef-9f42-517c1ec0d468,General Manager
+940,Fred,Rodriguez,[email protected],9381a10f-7495-4ca1-993a-abd7f22ac7a3,Physical Therapy Assistant
+941,Ryan,Ortiz,[email protected],48bcb923-f8db-4296-a455-ca67d959e7d3,Sales Associate
+942,Bonnie,Chapman,[email protected],625eafb1-464f-4ae9-b9d9-d9d372994795,Business Systems Development Analyst
+943,Terry,Larson,[email protected],2490a425-8cbf-42b2-baa2-ac10c2b78d9a,Budget/Accounting Analyst IV
+944,Barbara,Howell,[email protected],2317dc36-13ed-4455-ac34-0ca292474f51,Information Systems Manager
+945,Peter,Dean,[email protected],7b63b9b4-b882-4ca8-9aba-5236f38fbe45,Executive Secretary
+946,Charles,Hudson,[email protected],7e941d1f-aeee-4c43-ad7a-074b5d07737b,Data Coordiator
+947,Anna,Ross,[email protected],60a3f91a-0471-4078-aeaf-b89e6e4884ab,Accountant IV
+948,John,Smith,[email protected],893a3846-22c5-4c78-a29f-54a54f0a6344,Engineer III
+949,Robert,Richards,[email protected],294e22a5-f031-4528-931f-764f1c310417,Budget/Accounting Analyst III
+950,Tammy,Murphy,[email protected],28b3a935-189e-4034-b732-c6fb884bbe0b,Social Worker
+951,Theresa,Perkins,[email protected],84dc0e0e-40e8-4c1a-b580-cafc1cc696f8,Analog Circuit Design manager
+952,Teresa,King,[email protected],40391d3d-7e30-416b-9bcf-843faea92aed,Environmental Tech
+953,Lois,Davis,[email protected],2282e431-d7f5-4e2d-91d1-87c646c1b65f,Professor
+954,Lois,Larson,[email protected],f18fdc39-3e45-4f36-8792-e77e11bde1ac,Account Executive
+955,Lillian,Grant,[email protected],eee4219d-d679-497c-9518-9083891bfbb3,Recruiting Manager
+956,Julia,Duncan,[email protected],49d802d9-ae0d-4e46-a60c-6acb6f5ea303,Recruiting Manager
+957,Harry,Fisher,[email protected],6077ef93-de0c-41a0-bc56-7f249a83b85b,Web Designer I
+958,Andrea,Russell,[email protected],a2e9458c-6f15-4b9b-b9d3-61f89abb226b,Quality Control Specialist
+959,Henry,Ruiz,[email protected],00585cc3-b5f3-4961-a5e4-fdab0be8126d,Senior Editor
+960,Joshua,Tucker,[email protected],0870ea54-987f-4659-9749-a1205db3854f,Engineer I
+961,Frances,Arnold,[email protected],8701ceb8-09b6-4e17-a006-3cd54b390a9a,VP Quality Control
+962,Thomas,Carter,[email protected],164549f1-9732-40dc-ab89-f512e1b3ce34,Occupational Therapist
+963,Rebecca,Barnes,[email protected],baf47133-6ce6-4bcc-a059-c1b622a12ac3,Internal Auditor
+964,Andrea,Ruiz,[email protected],7632b85d-83a6-4766-b91a-30f9d1dae4a8,Computer Systems Analyst III
+965,David,Mason,[email protected],d39a3beb-5429-4d88-bf81-c8479d6e3100,Staff Accountant II
+966,Benjamin,Harrison,[email protected],e758e987-3f8f-442b-946b-ed9dfd8922dd,Accounting Assistant II
+967,Lawrence,Robinson,[email protected],d5a435c5-250a-479d-ae82-9f42a2757449,Help Desk Technician
+968,Timothy,Willis,[email protected],ae32eb52-e9d9-483b-b4ec-737eb5b596d7,Technical Writer
+969,Joyce,Wells,[email protected],5d1c22c4-9357-4378-942a-749ded2994d0,Senior Developer
+970,Andrea,White,[email protected],27a5c6b0-4965-447c-8847-1ebf61ce729c,Software Consultant
+971,Joan,Young,[email protected],451bce8e-ae7b-42bc-9fc7-aac4038eed4e,VP Product Management
+972,Gerald,Cole,[email protected],001bdc03-7a4b-466f-8ccd-261748f6e55c,Mechanical Systems Engineer
+973,Nicholas,Stephens,[email protected],74da8e68-ed00-4c03-91a5-4b25efbaf4bd,Nuclear Power Engineer
+974,Kathryn,Hunt,[email protected],d0df6133-2553-4fa2-9111-88b8f6503991,Research Associate
+975,Scott,Bishop,[email protected],ebe304a6-71d4-4c70-8922-2475e26b4f7c,Database Administrator II
+976,Howard,Reid,[email protected],d9080bf7-8f65-4fbf-a4de-e6ae07a5859d,Senior Financial Analyst
+977,Laura,Cook,[email protected],3c850199-7a2b-4d02-a39d-16f58412cf27,VP Product Management
+978,Harold,Perkins,[email protected],7d0575ec-4530-4029-9e49-dcc3db240801,VP Quality Control
+979,Todd,King,[email protected],071bf623-0072-4bc7-bd8f-a3320a3d6d14,Quality Control Specialist
+980,Adam,Burke,[email protected],7fbdd2e3-8f4b-4432-96f2-6acb07b567e6,Programmer I
+981,Lisa,Stanley,[email protected],f6293ce9-1240-43af-994a-53a96b403b4a,Quality Engineer
+982,Lois,Pierce,[email protected],cb3c4b34-b7bb-46d3-9314-3729b1f0e4d7,Product Engineer
+983,Kenneth,Wagner,[email protected],00025d9e-71a7-468c-9dc7-2fbe39d4e019,Civil Engineer
+984,Phillip,Gardner,[email protected],26021a8d-9243-419b-a2b9-f057992dd1ab,Business Systems Development Analyst
+985,Antonio,Cruz,[email protected],ef3c9adc-e4f1-4d5d-9b17-120d8b2713df,Marketing Assistant
+986,Thomas,Andrews,[email protected],5052098b-c887-4f44-8f11-340d000223b8,Editor
+987,Alan,Sanchez,[email protected],cf94f5ed-9567-4c10-b606-4cd76ba07fe9,Health Coach II
+988,Paula,Moreno,[email protected],37f6456d-8396-411c-9b43-e0199b0043b7,Research Assistant II
+989,Adam,Burton,[email protected],75d305e4-76e8-414c-961f-b0f59f630a5c,VP Marketing
+990,Lois,Freeman,[email protected],da9d490c-b921-4ed0-8ba4-6466c7726fc5,Financial Advisor
+991,Eric,Mason,[email protected],495fd5a2-77be-481f-8012-53d176b7a332,Mechanical Systems Engineer
+992,Jack,Brown,[email protected],80650afb-eb50-4b7b-afc0-980481d9f030,Physical Therapy Assistant
+993,Christopher,Jenkins,[email protected],2909999f-ca59-415a-a859-b1b5bb6f731d,Structural Analysis Engineer
+994,Melissa,Ramos,[email protected],3c58d35e-354e-4697-a278-4cf113da13b7,Design Engineer
+995,Harold,Burke,[email protected],f0990b43-f295-464a-977b-b799d74e8a03,Programmer Analyst III
+996,Louis,Diaz,[email protected],1f7cddbb-4633-419d-945e-95eb9d9d73bd,Pharmacist
+997,Roy,Lynch,[email protected],29541fac-e11a-4b5a-9f7e-226ed56f206f,Environmental Tech
+998,Melissa,Oliver,[email protected],19064fec-c8d5-4acb-a15f-f847d51e0476,Professor
+999,Todd,Murphy,[email protected],a4f804de-47c6-4b6a-b1fc-23851f465fa5,Financial Advisor
+1000,Andrea,Snyder,[email protected],47e86384-68b4-4a88-938c-b6680eb75466,General Manager

+ 85 - 0
Masuit.LuceneEFCore.SearchEngine.Test/Helpers/TestDataGenerator.cs

@@ -0,0 +1,85 @@
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+using Masuit.LuceneEFCore.SearchEngine.Test.Models;
+using System.Collections.Generic;
+using System.IO;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Test.Helpers
+{
+    public class TestDataGenerator
+    {
+        private static List<User> allTestUsers;
+        private static List<City> allTestCities;
+
+        public TestDataGenerator()
+        {
+            if (allTestUsers == null)
+            {
+                allTestUsers = new List<User>();
+                TextReader reader = new StreamReader("Helpers\\TestData\\MOCK_USERS.csv");
+
+                string data = reader.ReadLine();
+
+                while ((data = reader.ReadLine()) != null)
+                {
+                    string[] line = data.Split(',');
+                    allTestUsers.Add(new User()
+                    {
+                        Id = int.Parse(line[0]),
+                        FirstName = line[1],
+                        Surname = line[2],
+                        Email = line[3],
+                        JobTitle = line[5]
+                    });
+                }
+
+                reader.Close();
+            }
+
+            if (allTestCities == null)
+            {
+                allTestCities = new List<City>();
+                TextReader reader = new StreamReader("Helpers\\TestData\\MOCK_CITIES.csv");
+
+                string data = reader.ReadLine();
+                while ((data = reader.ReadLine()) != null)
+                {
+                    string[] line = data.Split(',');
+                    allTestCities.Add(new City()
+                    {
+                        Id = int.Parse(line[0]),
+                        Country = line[1],
+                        Code = line[2],
+                        Name = line[3],
+                    });
+                }
+
+                reader.Close();
+            }
+        }
+
+        public List<ILuceneIndexable> AllData
+        {
+            get
+            {
+                List<ILuceneIndexable> data = new List<ILuceneIndexable>();
+                data.AddRange(allTestUsers);
+                data.AddRange(allTestCities);
+                return data;
+            }
+        }
+
+        public User ANewUser(string firstName = "Joe", string surname = "Bloggs", string jobTitle = "IT Consultant")
+        {
+            string email = firstName + "." + surname + "@test.com";
+            var newUser = new User()
+            {
+                FirstName = firstName,
+                Surname = surname,
+                Email = email,
+                Id = allTestUsers.Count + 1,
+                JobTitle = jobTitle
+            };
+            return newUser;
+        }
+    }
+}

+ 66 - 0
Masuit.LuceneEFCore.SearchEngine.Test/Helpers/TestDbContext.cs

@@ -0,0 +1,66 @@
+using Masuit.LuceneEFCore.SearchEngine.Test.Models;
+using Microsoft.EntityFrameworkCore;
+using System.IO;
+using System.Linq;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Test.Helpers
+{
+    public class TestDbContext : DbContext
+    {
+        public DbSet<User> Users { get; set; }
+        public DbSet<City> Cities { get; set; }
+
+        public TestDbContext(DbContextOptions<TestDbContext> options) : base(options)
+        {
+            InitializeData();
+        }
+
+        public TestDbContext() : this(new DbContextOptionsBuilder<TestDbContext>().UseInMemoryDatabase("Add_writes_to_database").Options)
+        {
+        }
+
+        private void InitializeData()
+        {
+            if (!Users.Any())
+            {
+                TextReader reader = new StreamReader("Helpers\\TestData\\MOCK_USERS.csv");
+
+                string data = reader.ReadLine();
+
+                while ((data = reader.ReadLine()) != null)
+                {
+                    string[] line = data.Split(',');
+                    Users.Add(new User()
+                    {
+                        FirstName = line[1],
+                        Surname = line[2],
+                        Email = line[3],
+                        JobTitle = line[5]
+                    });
+                }
+                reader.Close();
+                SaveChanges();
+            }
+
+            if (!Cities.Any())
+            {
+                TextReader reader = new StreamReader("Helpers\\TestData\\MOCK_CITIES.csv");
+
+                string data = reader.ReadLine();
+                while ((data = reader.ReadLine()) != null)
+                {
+                    string[] line = data.Split(',');
+                    Cities.Add(new City()
+                    {
+                        Id = int.Parse(line[0]),
+                        Country = line[1],
+                        Code = line[2],
+                        Name = line[3]
+                    });
+                }
+                reader.Close();
+                SaveChanges();
+            }
+        }
+    }
+}

+ 131 - 0
Masuit.LuceneEFCore.SearchEngine.Test/LuceneIndexSearcherTests.cs

@@ -0,0 +1,131 @@
+using Lucene.Net.Analysis;
+using Lucene.Net.Analysis.Standard;
+using Lucene.Net.Documents;
+using Lucene.Net.Store;
+using Masuit.LuceneEFCore.SearchEngine.Test.Helpers;
+using Masuit.LuceneEFCore.SearchEngine.Test.Models;
+using System.Linq;
+using Xunit;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Test
+{
+    public class LuceneIndexSearcherTests : IClassFixture<TestDataGenerator>
+    {
+        // class setup
+        static readonly Directory Directory = new RAMDirectory();
+        static readonly Analyzer Analyzer = new StandardAnalyzer(Lucene.Net.Util.LuceneVersion.LUCENE_48);
+
+        // create an index
+        static readonly LuceneIndexer Indexer = new LuceneIndexer(Directory, Analyzer);
+        static readonly LuceneIndexSearcher Searcher = new LuceneIndexSearcher(Directory, Analyzer);
+
+        public LuceneIndexSearcherTests(TestDataGenerator tdg)
+        {
+            Indexer.CreateIndex(tdg.AllData);
+        }
+
+        [Fact]
+        public void AnIndexCanBeSearched()
+        {
+            SearchOptions options = new SearchOptions("John", "FirstName");
+
+            var results = Searcher.ScoredSearch(options);
+
+            Assert.Equal(5, results.TotalHits);
+        }
+
+        //[Fact]
+        //public void SearchesCanBeDoneAcrossMultipleTypes()
+        //{
+        //    SearchOptions options = new SearchOptions("John China", "FirstName, Country");
+        //    var results = searcher.ScoredSearch(options);
+
+        //    var firstType = results.Results.First().Document.GetField("Type");
+        //    var lastType = results.Results[results.TotalHits - 1].Document.GetField("Type");
+
+        //    Assert.NotEqual(firstType, lastType);
+        //}
+
+        [Fact]
+        public void TopNNumberOfResultsCanBeReturned()
+        {
+            SearchOptions options = new SearchOptions("China", "Country", 1000, null, typeof(City));
+
+            var allResults = Searcher.ScoredSearch(options);
+
+            options.Take = 10;
+
+            var subSet = Searcher.ScoredSearch(options);
+
+            for (var index = 0; index < 10; index++)
+            {
+                Assert.Equal(allResults.Results[index].Document.Get("IndexId"), subSet.Results[index].Document.Get("IndexId"));
+            }
+
+            Assert.Equal(10, subSet.Results.Count);
+            Assert.Equal(allResults.TotalHits, subSet.TotalHits);
+        }
+
+        [Fact]
+        public void ResultsetCanBeSkippedAndTaken()
+        {
+            SearchOptions options = new SearchOptions("China", "Country", 1000, null, typeof(City));
+
+            var allResults = Searcher.ScoredSearch(options);
+
+            options.Take = 10;
+            options.Skip = 10;
+
+            var subSet = Searcher.ScoredSearch(options);
+
+            for (var index = 0; index < 10; index++)
+            {
+                Assert.Equal(allResults.Results[index + 10].Document.Get("IndexId"), subSet.Results[index].Document.Get("IndexId"));
+            }
+
+            Assert.Equal(10, subSet.Results.Count);
+            Assert.Equal(allResults.TotalHits, subSet.TotalHits);
+        }
+
+        [Fact]
+        public void ResultsetCanBeOrdered()
+        {
+            SearchOptions options = new SearchOptions("John", "FirstName", 1000, null, typeof(User));
+
+            var unordered = Searcher.ScoredSearch(options);
+
+            options.OrderBy.Add("Surname");
+
+            var ordered = Searcher.ScoredSearch(options);
+
+            Assert.Equal(ordered.TotalHits, unordered.TotalHits);
+            Assert.NotEqual(ordered.Results.First().Document.Get("Id"), unordered.Results.First().Document.Get("Id"));
+        }
+
+        [Fact]
+        public void ASingleDocumentIsReturnedFromScoredSearchSingle()
+        {
+            SearchOptions options = new SearchOptions("[email protected]", "Email");
+
+            var result = Searcher.ScoredSearchSingle(options);
+
+            Assert.NotNull(result);
+            // Assert.InstanceOfType(result, typeof(Document));
+            Assert.IsType<Document>(result);
+            Assert.IsAssignableFrom<Document>(result);
+            Assert.Equal("[email protected]", result.Get("Email"));
+        }
+
+        [Fact]
+        public void MultipleResultsIsNotAProblemFromScoredSearchSingle()
+        {
+            SearchOptions options = new SearchOptions("John", "FirstName");
+
+            var result = Searcher.ScoredSearchSingle(options);
+
+            Assert.NotNull(result);
+            Assert.IsType<Document>(result);
+            Assert.Equal("John", result.Get("FirstName"));
+        }
+    }
+}

+ 146 - 0
Masuit.LuceneEFCore.SearchEngine.Test/LuceneIndexerTests.cs

@@ -0,0 +1,146 @@
+using Lucene.Net.Analysis;
+using Lucene.Net.Analysis.Standard;
+using Lucene.Net.Documents;
+using Lucene.Net.Store;
+using Masuit.LuceneEFCore.SearchEngine.Test.Helpers;
+using Masuit.LuceneEFCore.SearchEngine.Test.Models;
+using System;
+using System.Linq;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Test
+{
+    [Trait("Category", "LuceneIndexer")]
+    public class LuceneIndexerTests : IDisposable
+    {
+        private readonly ITestOutputHelper _output;
+        private LuceneIndexer _indexer;
+
+        public LuceneIndexerTests(ITestOutputHelper output)
+        {
+            _output = output;
+        }
+
+        public void Dispose()
+        {
+        }
+
+        [Fact]
+        public void AnIndexCanBeCreated()
+        {
+            TestDataGenerator tdg = new TestDataGenerator();
+            Directory directory = new RAMDirectory();
+
+            Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.LuceneVersion.LUCENE_48);
+            _indexer = new LuceneIndexer(directory, analyzer);
+            _indexer.CreateIndex(tdg.AllData);
+            Assert.Equal(2000, _indexer.Count());
+            analyzer.Dispose();
+            directory.ClearLock("write.lock");
+            directory.Dispose();
+        }
+
+        [Fact]
+        public void AnIndexCanBeDeleted()
+        {
+            TestDataGenerator tdg = new TestDataGenerator();
+            Directory directory = new RAMDirectory();
+            Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.LuceneVersion.LUCENE_48);
+            _indexer = new LuceneIndexer(directory, analyzer);
+            _indexer.CreateIndex(tdg.AllData);
+            Assert.Equal(2000, _indexer.Count());
+
+            _indexer.DeleteAll();
+
+            Assert.Equal(0, _indexer.Count());
+            directory.ClearLock("write.lock");
+            analyzer.Dispose();
+            directory.Dispose();
+        }
+
+        [Fact]
+        public void AnItemCanBeAddedToTheIndex()
+        {
+            TestDataGenerator tdg = new TestDataGenerator();
+            Directory directory = new RAMDirectory();
+            Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.LuceneVersion.LUCENE_48);
+            _indexer = new LuceneIndexer(directory, analyzer);
+            _indexer.CreateIndex(tdg.AllData);
+            Assert.Equal(2000, _indexer.Count());
+
+            _indexer.Add(tdg.ANewUser());
+
+            Assert.Equal(2001, _indexer.Count());
+            directory.ClearLock("write.lock");
+        }
+
+        [Fact]
+        public void AnItemCanBeRemovedFromTheIndex()
+        {
+            TestDataGenerator tdg = new TestDataGenerator();
+            Directory directory = new RAMDirectory();
+            Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.LuceneVersion.LUCENE_48);
+            _indexer = new LuceneIndexer(directory, analyzer);
+            _indexer.CreateIndex(tdg.AllData);
+            _indexer.Delete(tdg.AllData.First());
+            Assert.True(tdg.AllData.Count > _indexer.Count());
+            directory.ClearLock("write.lock");
+        }
+
+        [Fact]
+        public void AnItemCanBeUpdatedInTheIndex()
+        {
+            TestDataGenerator tdg = new TestDataGenerator();
+            Directory directory = new RAMDirectory();
+            Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.LuceneVersion.LUCENE_48);
+            _indexer = new LuceneIndexer(directory, analyzer);
+            _indexer.CreateIndex(tdg.AllData);
+
+            // we need a searcher for this test
+            LuceneIndexSearcher searcher = new LuceneIndexSearcher(directory, analyzer);
+
+            // get the 1st item
+            SearchOptions options = new SearchOptions("[email protected]", "Email");
+
+            var initialResults = searcher.ScoredSearch(options);
+            foreach (var item in initialResults.Results)
+            {
+                _output.WriteLine($"{item.Score}\t{item.Document.Get("Id")}\t{item.Document.Get("FirstName")}\t{item.Document.Get("Email")}");
+            }
+            //Assert.Equal(1, initialResults.TotalHits);
+
+            Document rambler = initialResults.Results.First().Document;
+
+            // convert to ILuceneIndexable
+            User user = new User()
+            {
+                Id = int.Parse(rambler.Get("Id")),
+                FirstName = rambler.Get("FirstName"),
+                Surname = rambler.Get("Surname"),
+                Email = rambler.Get("Email"),
+                JobTitle = rambler.Get("JobTitle")
+            };
+
+            // make an edit
+            user.FirstName = "Duke";
+            user.Surname = "Nukem";
+
+            // add the update to the indexer
+            _indexer.Update(user);
+
+            // search again
+            var endResults = searcher.ScoredSearch(options);
+            foreach (var item in endResults.Results)
+            {
+                _output.WriteLine($"{item.Score}\t{item.Document.Get("Id")}\t{item.Document.Get("FirstName")}\t{item.Document.Get("Email")}");
+            }
+
+            // Assert.Equal(1, endResults.TotalHits);
+            Assert.Equal(user.Id.ToString(), endResults.Results.First().Document.Get("Id"));
+            Assert.Equal(user.FirstName, endResults.Results.First().Document.Get("FirstName"));
+            Assert.Equal(user.Surname, endResults.Results.First().Document.Get("Surname"));
+            directory.ClearLock("write.lock");
+        }
+    }
+}

+ 86 - 0
Masuit.LuceneEFCore.SearchEngine.Test/LuceneSearchOptionsTests.cs

@@ -0,0 +1,86 @@
+using System.Collections.Generic;
+using Xunit;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Test
+{
+    public class LuceneSearchOptionsTests
+    {
+        [Fact]
+        public void DefaultLuceneSearchOptionsInitialisesCollections()
+        {
+            SearchOptions options = new SearchOptions();
+
+            Assert.NotNull(options.OrderBy);
+            Assert.NotNull(options.Fields);
+        }
+
+        [Fact]
+        public void LuceneSearchOptionsCanBeConstructedWithMultipleFields()
+        {
+            SearchOptions options = new SearchOptions("Test", "one,two,three,four");
+
+            Assert.Equal(4, options.Fields.Count);
+            Assert.Equal("one", options.Fields[0]);
+            Assert.Equal("two", options.Fields[1]);
+        }
+
+        [Fact]
+        public void LuceneSearchOptionsParsesFieldsAndOrderBy()
+        {
+            SearchOptions options = new SearchOptions("Test", "one, two  ,  three", 1000, null, null, "test, another test");
+
+            Assert.Equal(3, options.Fields.Count);
+            Assert.Equal("one", options.Fields[0]);
+            Assert.Equal("two", options.Fields[1]);
+            Assert.Equal("three", options.Fields[2]);
+
+            Assert.Equal(2, options.OrderBy.Count);
+            Assert.Equal("test", options.OrderBy[0]);
+            Assert.Equal("anothertest", options.OrderBy[1]);
+        }
+
+        [Fact]
+        public void GetBoostsWillReturnAValidSetOfBoostsForGivenOptions()
+        {
+            SearchOptions options = new SearchOptions("John Developer", "FirstName,JobTitle");
+
+            Assert.Equal(2, options.Boosts.Count);
+            Assert.Equal(1, options.Boosts["FirstName"]);
+            Assert.Equal(1, options.Boosts["JobTitle"]);
+        }
+
+        [Fact]
+        public void ABoostCanBeAdded()
+        {
+            SearchOptions options = new SearchOptions("Test", "One,Two,Three");
+
+            options.SetBoost("Two", 2f);
+
+            Assert.Equal(3, options.Boosts.Count);
+            Assert.Equal(2, options.Boosts["Two"]);
+        }
+
+        [Fact]
+        public void ClearingBoostsWillReturnDefaultValues()
+        {
+            Dictionary<string, float> boosts = new Dictionary<string, float>
+            {
+                { "One", 1.1f },
+                { "Two", 9.1f }
+            };
+
+
+            SearchOptions options = new SearchOptions("Test", "One,Two", 1000, boosts);
+
+            Assert.Equal(2, options.Boosts.Count);
+            Assert.Equal(1.1f, options.Boosts["One"]);
+            Assert.Equal(9.1f, options.Boosts["Two"]);
+
+            options.ClearBoosts();
+
+            Assert.Equal(2, options.Boosts.Count);
+            Assert.Equal(1, options.Boosts["One"]);
+            Assert.Equal(1, options.Boosts["Two"]);
+        }
+    }
+}

+ 29 - 0
Masuit.LuceneEFCore.SearchEngine.Test/Masuit.LuceneEFCore.SearchEngine.Test.csproj

@@ -0,0 +1,29 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp2.2</TargetFramework>
+
+    <IsPackable>false</IsPackable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
+    <PackageReference Include="xunit" Version="2.4.0" />
+    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.1" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\Masuit.LuceneEFCore.SearchEngine\Masuit.LuceneEFCore.SearchEngine.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <None Update="Helpers\TestData\MOCK_CITIES.csv">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Update="Helpers\TestData\MOCK_USERS.csv">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+
+</Project>

+ 14 - 0
Masuit.LuceneEFCore.SearchEngine.Test/Models/City.cs

@@ -0,0 +1,14 @@
+namespace Masuit.LuceneEFCore.SearchEngine.Test.Models
+{
+    public class City : LuceneIndexableBaseEntity
+    {
+        [LuceneIndexable]
+        public string Name { get; set; }
+
+        public string Code { get; set; }
+
+        [LuceneIndexable]
+        public string Country { get; set; }
+
+    }
+}

+ 8 - 0
Masuit.LuceneEFCore.SearchEngine.Test/Models/NonIndexable.cs

@@ -0,0 +1,8 @@
+namespace Masuit.LuceneEFCore.SearchEngine.Test.Models
+{
+    public class NonIndexable
+    {
+        public int Id { get; set; }
+        public string Name { get; set; }
+    }
+}

+ 18 - 0
Masuit.LuceneEFCore.SearchEngine.Test/Models/User.cs

@@ -0,0 +1,18 @@
+namespace Masuit.LuceneEFCore.SearchEngine.Test.Models
+{
+    public class User : LuceneIndexableBaseEntity
+    {
+        [LuceneIndexable]
+        public string FirstName { get; set; }
+
+        [LuceneIndexable]
+        public string Surname { get; set; }
+
+        [LuceneIndexable]
+        public string Email { get; set; }
+
+        [LuceneIndexable]
+        public string JobTitle { get; set; }
+
+    }
+}

+ 299 - 0
Masuit.LuceneEFCore.SearchEngine.Test/SearchContextTests.cs

@@ -0,0 +1,299 @@
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+using Masuit.LuceneEFCore.SearchEngine.Test.Helpers;
+using Masuit.LuceneEFCore.SearchEngine.Test.Models;
+using Microsoft.EntityFrameworkCore;
+using System.Linq;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Test
+{
+    [Trait("Category", "SearchContext")]
+    public class SearchContextTests
+    {
+        private TestDbContext _context;
+        private readonly ITestOutputHelper _output;
+        string _tempName;
+
+        public SearchContextTests(ITestOutputHelper output)
+        {
+            _output = output;
+        }
+
+        private void InitializeContext()
+        {
+            _tempName = System.IO.Path.GetTempFileName();
+            var dboptions = new DbContextOptionsBuilder<TestDbContext>().UseInMemoryDatabase(databaseName: _tempName).Options;
+            _context = new TestDbContext(dboptions);
+        }
+
+        [Fact]
+        public void AContextProviderCanIndexADatabase()
+        {
+            InitializeContext();
+            LuceneIndexerOptions options = new LuceneIndexerOptions
+            {
+                UseRamDirectory = true
+            };
+            SearchContextProvider<TestDbContext> searchProvider = new SearchContextProvider<TestDbContext>(options, _context);
+
+            searchProvider.CreateIndex();
+
+            Assert.Equal(2000, searchProvider.IndexCount);
+
+            // cleanup
+            searchProvider.DeleteIndex();
+        }
+
+        [Fact]
+        public void AContextCanBeSearchedUsingAContextProvider()
+        {
+            InitializeContext();
+
+
+            LuceneIndexerOptions options = new LuceneIndexerOptions
+            {
+                UseRamDirectory = true
+            };
+            SearchContextProvider<TestDbContext> searchProvider = new SearchContextProvider<TestDbContext>(options, _context);
+
+            searchProvider.CreateIndex();
+
+            SearchOptions searchOptions = new SearchOptions("John", "FirstName");
+
+            // test
+            var results = searchProvider.ScoredSearch<User>(searchOptions);
+
+            Assert.Equal(5, results.TotalHits);
+
+            // cleanup
+            searchProvider.DeleteIndex();
+        }
+
+        [Fact]
+        public void SkipAndTakeWorkWhenSearchingUsingAContextProvider()
+        {
+            InitializeContext();
+            LuceneIndexerOptions options = new LuceneIndexerOptions
+            {
+                UseRamDirectory = true
+            };
+            SearchContextProvider<TestDbContext> searchProvider = new SearchContextProvider<TestDbContext>(options, _context);
+
+            searchProvider.CreateIndex();
+
+            SearchOptions searchOptions = new SearchOptions("John", "FirstName");
+
+            // test
+            var initialResults = searchProvider.ScoredSearch<User>(searchOptions);
+            int lastId = initialResults.Results[4].Entity.Id;
+
+            Assert.Equal(5, initialResults.TotalHits);
+            Assert.Equal(5, initialResults.Results.Count);
+
+            searchOptions.Skip = 4;
+            searchOptions.Take = 1;
+            var subResults = searchProvider.ScoredSearch<User>(searchOptions);
+
+            Assert.Equal(5, subResults.TotalHits);
+            Assert.Equal(1, subResults.Results.Count);
+            Assert.Equal(lastId, subResults.Results.First().Entity.Id);
+
+            // cleanup
+            searchProvider.DeleteIndex();
+        }
+
+        [Fact]
+        public void AContextCanBeSearchedUsingAWildCard()
+        {
+            InitializeContext();
+            LuceneIndexerOptions options = new LuceneIndexerOptions
+            {
+                UseRamDirectory = true
+            };
+            SearchContextProvider<TestDbContext> searchProvider = new SearchContextProvider<TestDbContext>(options, _context);
+
+            searchProvider.CreateIndex();
+
+            SearchOptions searchOptions = new SearchOptions("Joh*", "FirstName");
+
+            // test
+            var results = searchProvider.ScoredSearch<User>(searchOptions);
+            PrintResult(results);
+
+            Assert.Equal(10, results.TotalHits);
+
+            // cleanup
+            searchProvider.DeleteIndex();
+        }
+
+
+        [Fact]
+        public void ASearchWillReturnTheSameResultsAsAScoredSearch()
+        {
+            InitializeContext();
+            LuceneIndexerOptions options = new LuceneIndexerOptions
+            {
+                UseRamDirectory = true
+            };
+            SearchContextProvider<TestDbContext> searchProvider = new SearchContextProvider<TestDbContext>(options, _context);
+
+            searchProvider.CreateIndex();
+
+            SearchOptions searchOptions = new SearchOptions("Joh*", "FirstName");
+
+            // test
+            var results = searchProvider.Search<User>(searchOptions);
+
+            Assert.Equal(10, results.TotalHits);
+
+            // cleanup
+            searchProvider.DeleteIndex();
+        }
+
+        [Fact]
+        public void AScoredSearchWillOrderByRelevence()
+        {
+            InitializeContext();
+            LuceneIndexerOptions options = new LuceneIndexerOptions
+            {
+                UseRamDirectory = true
+            };
+            SearchContextProvider<TestDbContext> searchProvider = new SearchContextProvider<TestDbContext>(options, _context);
+
+            searchProvider.CreateIndex();
+
+            SearchOptions searchOptions = new SearchOptions("Burns", "FirstName,Surname");
+
+            var results = searchProvider.ScoredSearch<User>(searchOptions);
+
+            var first = results.Results.First().Entity;
+            var highest = results.Results.First().Score;
+            var lowest = results.Results.Last().Score;
+
+            Assert.True(highest > lowest);
+            Assert.Equal("Jeremy", first.FirstName);
+            Assert.Equal("Burns", first.Surname);
+
+            searchProvider.DeleteIndex();
+        }
+
+        [Fact]
+        public void ASearchWillStillOrderByRelevence()
+        {
+            InitializeContext();
+            LuceneIndexerOptions options = new LuceneIndexerOptions
+            {
+                UseRamDirectory = true
+            };
+            SearchContextProvider<TestDbContext> searchProvider = new SearchContextProvider<TestDbContext>(options, _context);
+
+            searchProvider.CreateIndex();
+
+            SearchOptions searchOptions = new SearchOptions("Jeremy Burns", "FirstName,Surname");
+
+            var results = searchProvider.Search<User>(searchOptions);
+
+            var first = results.Results.First();
+
+            Assert.Equal("Jeremy", first.FirstName);
+            Assert.Equal("Burns", first.Surname);
+
+            searchProvider.DeleteIndex();
+        }
+
+        [Fact]
+        public void ASearchCanOrderByMultipleFields()
+        {
+            InitializeContext();
+            LuceneIndexerOptions options = new LuceneIndexerOptions
+            {
+                UseRamDirectory = true
+            };
+            SearchContextProvider<TestDbContext> searchProvider = new SearchContextProvider<TestDbContext>(options, _context);
+
+            User jc = new User()
+            {
+                FirstName = "John",
+                Surname = "Chapman",
+                JobTitle = "Test Engineer",
+                Email = "[email protected]"
+            };
+            _context.Users.Add(jc);
+            _context.SaveChanges();
+
+            searchProvider.CreateIndex();
+
+            SearchOptions search = new SearchOptions("John", "FirstName", 1000, null, null, "Surname,JobTitle");
+
+            var results = searchProvider.ScoredSearch<User>(search);
+
+            var topResult = results.Results[0];
+            var secondResult = results.Results[1];
+
+            Assert.Equal("Sales Associate", topResult.Entity.JobTitle);
+            Assert.Equal("Test Engineer", secondResult.Entity.JobTitle);
+
+            searchProvider.DeleteIndex();
+        }
+
+        [Fact]
+        public void SaveChangesUpdatesEntitiesAddedToTheIndex()
+        {
+            InitializeContext();
+            LuceneIndexerOptions options = new LuceneIndexerOptions
+            {
+                UseRamDirectory = true
+            };
+            SearchContextProvider<TestDbContext> searchProvider = new SearchContextProvider<TestDbContext>(options, _context);
+
+            searchProvider.CreateIndex();
+
+            var newUser = new User()
+            {
+                FirstName = "Duke",
+                Surname = "Nukem",
+                Email = "[email protected]",
+                JobTitle = "Shooty Man"
+            };
+
+            var search = new SearchOptions("Nukem", "Surname");
+
+            var initialResults = searchProvider.Search<User>(search);
+
+            searchProvider.Context.Users.Add(newUser);
+            searchProvider.SaveChanges();
+
+            var newResults = searchProvider.Search<User>(search);
+
+            Assert.Equal(0, initialResults.TotalHits);
+            Assert.Equal(1, newResults.TotalHits);
+
+            Assert.Equal(newUser.Id, newResults.Results[0].Id);
+        }
+
+        [Fact]
+        public void NonValidEntitiesAreIgnored()
+        {
+            InitializeContext();
+            LuceneIndexerOptions options = new LuceneIndexerOptions
+            {
+                UseRamDirectory = true
+            };
+            SearchContextProvider<TestDbContext> searchProvider = new SearchContextProvider<TestDbContext>(options, _context);
+
+            searchProvider.CreateIndex();
+
+            Assert.True(searchProvider.IndexCount > 0);
+        }
+
+        private void PrintResult(IScoredSearchResultCollection<User> results)
+        {
+            _output.WriteLine($"Total Hist: {results.TotalHits}\tTime Taken: {results.Elapsed}");
+            foreach (IScoredSearchResult<User> item in results.Results)
+            {
+                _output.WriteLine($"Score: {item.Score}\tName:{item.Entity.FirstName}\tSurname: {item.Entity.Surname}\tEmail: {item.Entity.Email}");
+            }
+        }
+    }
+}

+ 37 - 0
Masuit.LuceneEFCore.SearchEngine.sln

@@ -0,0 +1,37 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.28307.329
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masuit.LuceneEFCore.SearchEngine", "Masuit.LuceneEFCore.SearchEngine\Masuit.LuceneEFCore.SearchEngine.csproj", "{1A9A907B-8254-40EF-BB80-47B716919B07}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masuit.LuceneEFCore.SearchEngine.Test", "Masuit.LuceneEFCore.SearchEngine.Test\Masuit.LuceneEFCore.SearchEngine.Test.csproj", "{0E1A15E2-174C-4FE3-A4CC-A77B9BC326E8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp1", "ConsoleApp1\ConsoleApp1.csproj", "{6EF46C69-1D78-40A7-8DD1-92E017CC492E}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{1A9A907B-8254-40EF-BB80-47B716919B07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1A9A907B-8254-40EF-BB80-47B716919B07}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1A9A907B-8254-40EF-BB80-47B716919B07}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1A9A907B-8254-40EF-BB80-47B716919B07}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0E1A15E2-174C-4FE3-A4CC-A77B9BC326E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0E1A15E2-174C-4FE3-A4CC-A77B9BC326E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0E1A15E2-174C-4FE3-A4CC-A77B9BC326E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0E1A15E2-174C-4FE3-A4CC-A77B9BC326E8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6EF46C69-1D78-40A7-8DD1-92E017CC492E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6EF46C69-1D78-40A7-8DD1-92E017CC492E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6EF46C69-1D78-40A7-8DD1-92E017CC492E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6EF46C69-1D78-40A7-8DD1-92E017CC492E}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {C5C40C6B-2856-4202-A102-44DD07D576E4}
+	EndGlobalSection
+EndGlobal

+ 83 - 0
Masuit.LuceneEFCore.SearchEngine/Helpers/DocumentExtension.cs

@@ -0,0 +1,83 @@
+using Lucene.Net.Documents;
+using System;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Helpers
+{
+    public static class DocumentExtension
+    {
+
+        /// <summary>
+        /// 获取文档的值
+        /// </summary>
+        /// <param name="doc">Lucene文档</param>
+        /// <param name="key">键</param>
+        /// <param name="t">类型</param>
+        /// <returns></returns>
+        public static object Get(this Document doc, string key, Type t)
+        {
+            string value = doc.Get(key);
+            switch (t)
+            {
+                case Type _ when t.IsAssignableFrom(typeof(int)):
+                    return int.Parse(value);
+                case Type _ when t.IsAssignableFrom(typeof(DateTime)):
+                    return DateTime.Parse(value);
+                case Type _ when t.IsAssignableFrom(typeof(double)):
+                    return double.Parse(value);
+                case Type _ when t.IsAssignableFrom(typeof(long)):
+                    return long.Parse(value);
+                case Type _ when t.IsAssignableFrom(typeof(decimal)):
+                    return decimal.Parse(value);
+                case Type _ when t.IsAssignableFrom(typeof(char)):
+                    return char.Parse(value);
+                case Type _ when t.IsAssignableFrom(typeof(byte)):
+                    return byte.Parse(value);
+                case Type _ when t.IsAssignableFrom(typeof(float)):
+                    return float.Parse(value);
+                case Type _ when t.IsAssignableFrom(typeof(bool)):
+                    return bool.Parse(value);
+                case Type _ when t.IsAssignableFrom(typeof(string)):
+                    return value;
+                default:
+                    return Convert.ChangeType(value, t);
+            }
+        }
+
+        /// <summary>
+        /// 获取文档的值
+        /// </summary>
+        /// <param name="doc">Lucene文档</param>
+        /// <param name="key">键</param>
+        /// <returns></returns>
+        public static object Get<T>(this Document doc, string key)
+        {
+            string value = doc.Get(key);
+            switch (typeof(T))
+            {
+                case Type _ when typeof(T).IsAssignableFrom(typeof(int)):
+                    return int.Parse(value);
+                case Type _ when typeof(T).IsAssignableFrom(typeof(DateTime)):
+                    return DateTime.Parse(value);
+                case Type _ when typeof(T).IsAssignableFrom(typeof(double)):
+                    return double.Parse(value);
+                case Type _ when typeof(T).IsAssignableFrom(typeof(long)):
+                    return long.Parse(value);
+                case Type _ when typeof(T).IsAssignableFrom(typeof(decimal)):
+                    return decimal.Parse(value);
+                case Type _ when typeof(T).IsAssignableFrom(typeof(char)):
+                    return char.Parse(value);
+                case Type _ when typeof(T).IsAssignableFrom(typeof(byte)):
+                    return byte.Parse(value);
+                case Type _ when typeof(T).IsAssignableFrom(typeof(float)):
+                    return float.Parse(value);
+                case Type _ when typeof(T).IsAssignableFrom(typeof(bool)):
+                    return bool.Parse(value);
+                case Type _ when typeof(T).IsAssignableFrom(typeof(string)):
+                    return value;
+                default:
+                    return Convert.ChangeType(value, typeof(T));
+            }
+        }
+
+    }
+}

+ 66 - 0
Masuit.LuceneEFCore.SearchEngine/Helpers/StringHelpers.cs

@@ -0,0 +1,66 @@
+using HtmlAgilityPack;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Helpers
+{
+    public static class StringHelpers
+    {
+        /// <summary>
+        /// 移除字符串的指定字符
+        /// </summary>
+        /// <param name="s"></param>
+        /// <param name="chars"></param>
+        /// <returns></returns>
+        public static string RemoveCharacters(this string s, IEnumerable<char> chars)
+        {
+            if (string.IsNullOrEmpty(s))
+            {
+                return string.Empty;
+            }
+            return new string(s.Where(c => !chars.Contains(c)).ToArray());
+        }
+
+        /// <summary>
+        /// 移除html标签
+        /// </summary>
+        /// <param name="html"></param>
+        /// <returns></returns>
+        public static string RemoveUnwantedTags(this string html)
+        {
+            if (string.IsNullOrEmpty(html))
+            {
+                return string.Empty;
+            }
+
+            var document = new HtmlDocument();
+            document.LoadHtml(html);
+
+            var nodes = new Queue<HtmlNode>(document.DocumentNode.SelectNodes("./*|./text()"));
+
+            while (nodes.Count > 0)
+            {
+                var node = nodes.Dequeue();
+                var parentNode = node.ParentNode;
+
+                if (node.Name != "#text")
+                {
+                    var childNodes = node.SelectNodes("./*|./text()");
+
+                    if (childNodes != null)
+                    {
+                        foreach (var child in childNodes)
+                        {
+                            nodes.Enqueue(child);
+                            parentNode.InsertBefore(child, node);
+                        }
+                    }
+
+                    parentNode.RemoveChild(node);
+                }
+            }
+
+            return document.DocumentNode.InnerHtml;
+        }
+    }
+}

+ 32 - 0
Masuit.LuceneEFCore.SearchEngine/Interfaces/ILuceneIndexSearcher.cs

@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Interfaces
+{
+    /// <summary>
+    /// 搜索引擎
+    /// </summary>
+    public interface ILuceneIndexSearcher
+    {
+        /// <summary>
+        /// 按权重搜索
+        /// </summary>
+        /// <param name="options"></param>
+        /// <returns></returns>
+        ILuceneSearchResultCollection ScoredSearch(SearchOptions options);
+
+        /// <summary>
+        /// 按权重搜索
+        /// </summary>
+        /// <param name="keywords">关键词</param>
+        /// <param name="fields">限定检索字段</param>
+        /// <param name="maximumNumberOfHits">最大检索量</param>
+        /// <param name="boosts">加速器</param>
+        /// <param name="type">文档类型</param>
+        /// <param name="sortBy">排序字段</param>
+        /// <param name="skip">跳过多少条</param>
+        /// <param name="take">取多少条</param>
+        /// <returns></returns>
+        ILuceneSearchResultCollection ScoredSearch(string keywords, string fields, int maximumNumberOfHits, Dictionary<string, float> boosts, Type type, string sortBy, int? skip, int? take);
+    }
+}

+ 26 - 0
Masuit.LuceneEFCore.SearchEngine/Interfaces/ILuceneIndexable.cs

@@ -0,0 +1,26 @@
+using Lucene.Net.Documents;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Interfaces
+{
+    /// <summary>
+    /// 需要被索引的实体基类
+    /// </summary>
+    public interface ILuceneIndexable
+    {
+        /// <summary>
+        /// 主键id
+        /// </summary>
+        int Id { get; set; }
+
+        /// <summary>
+        /// 索引id
+        /// </summary>
+        string IndexId { get; set; }
+
+        /// <summary>
+        /// 转换成Lucene文档
+        /// </summary>
+        /// <returns></returns>
+        Document ToDocument();
+    }
+}

+ 56 - 0
Masuit.LuceneEFCore.SearchEngine/Interfaces/ILuceneIndexer.cs

@@ -0,0 +1,56 @@
+using System.Collections.Generic;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Interfaces
+{
+    public interface ILuceneIndexer
+    {
+        /// <summary>
+        /// 添加到索引
+        /// </summary>
+        /// <param name="entity">实体</param>
+        void Add(ILuceneIndexable entity);
+
+        /// <summary>
+        /// 创建索引
+        /// </summary>
+        /// <param name="entities">实体集</param>
+        /// <param name="recreate">是否需要覆盖</param>
+        void CreateIndex(IEnumerable<ILuceneIndexable> entities, bool recreate);
+
+        /// <summary>
+        /// 删除索引
+        /// </summary>
+        /// <param name="entity">实体</param>
+        void Delete(ILuceneIndexable entity);
+
+        /// <summary>
+        /// 删除所有索引
+        /// </summary>
+        /// <param name="commit">是否提交</param>
+        void DeleteAll(bool commit);
+
+        /// <summary>
+        /// 更新索引
+        /// </summary>
+        /// <param name="entity">实体</param>
+        void Update(ILuceneIndexable entity);
+
+        /// <summary>
+        /// 更新索引
+        /// </summary>
+        /// <param name="change">实体</param>
+        void Update(LuceneIndexChange change);
+
+        /// <summary>
+        /// 更新索引
+        /// </summary>
+        /// <param name="changeset">实体</param>
+        void Update(LuceneIndexChangeset changeset);
+
+        /// <summary>
+        /// 索引库数量
+        /// </summary>
+        /// <returns></returns>
+        int Count();
+    }
+}

+ 20 - 0
Masuit.LuceneEFCore.SearchEngine/Interfaces/ILuceneSearchResult.cs

@@ -0,0 +1,20 @@
+using Lucene.Net.Documents;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Interfaces
+{
+    /// <summary>
+    /// 搜索结果
+    /// </summary>
+    public interface ILuceneSearchResult
+    {
+        /// <summary>
+        /// 匹配度
+        /// </summary>
+        float Score { get; set; }
+
+        /// <summary>
+        /// 文档
+        /// </summary>
+        Document Document { get; set; }
+    }
+}

+ 25 - 0
Masuit.LuceneEFCore.SearchEngine/Interfaces/ILuceneSearchResultCollection.cs

@@ -0,0 +1,25 @@
+using System.Collections.Generic;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Interfaces
+{
+    /// <summary>
+    /// 搜索结果集
+    /// </summary>
+    public interface ILuceneSearchResultCollection
+    {
+        /// <summary>
+        /// 总条数
+        /// </summary>
+        int TotalHits { get; set; }
+
+        /// <summary>
+        /// 耗时
+        /// </summary>
+        long Elapsed { get; set; }
+
+        /// <summary>
+        /// 结果集
+        /// </summary>
+        IList<ILuceneSearchResult> Results { get; set; }
+    }
+}

+ 19 - 0
Masuit.LuceneEFCore.SearchEngine/Interfaces/IScoredSearchResult.cs

@@ -0,0 +1,19 @@
+namespace Masuit.LuceneEFCore.SearchEngine.Interfaces
+{
+    /// <summary>
+    /// 结果项
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    public interface IScoredSearchResult<T>
+    {
+        /// <summary>
+        /// 匹配度
+        /// </summary>
+        float Score { get; set; }
+
+        /// <summary>
+        /// 实体
+        /// </summary>
+        T Entity { get; set; }
+    }
+}

+ 26 - 0
Masuit.LuceneEFCore.SearchEngine/Interfaces/IScoredSearchResultCollection.cs

@@ -0,0 +1,26 @@
+using System.Collections.Generic;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Interfaces
+{
+    /// <summary>
+    /// 搜索结果集
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    public interface IScoredSearchResultCollection<T>
+    {
+        /// <summary>
+        /// 总条数
+        /// </summary>
+        int TotalHits { get; set; }
+
+        /// <summary>
+        /// 耗时
+        /// </summary>
+        long Elapsed { get; set; }
+
+        /// <summary>
+        /// 结果集
+        /// </summary>
+        IList<IScoredSearchResult<T>> Results { get; set; }
+    }
+}

+ 70 - 0
Masuit.LuceneEFCore.SearchEngine/Interfaces/ISearchContextProvider.cs

@@ -0,0 +1,70 @@
+using Microsoft.EntityFrameworkCore;
+using System.Threading.Tasks;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Interfaces
+{
+    public interface ISearchContextProvider<out TContext> where TContext : DbContext
+    {
+        /// <summary>
+        /// 数据库上下文
+        /// </summary>
+        TContext Context { get; }
+
+        /// <summary>
+        /// 索引总数
+        /// </summary>
+        int IndexCount { get; }
+
+        /// <summary>
+        /// 创建索引
+        /// </summary>
+        void CreateIndex();
+
+        /// <summary>
+        /// 删除索引
+        /// </summary>
+        void DeleteIndex();
+
+        /// <summary>
+        /// 保存数据更改并同步索引
+        /// </summary>
+        /// <param name="index">创建索引</param>
+        /// <returns></returns>
+        int SaveChanges(bool index = true);
+
+        /// <summary>
+        /// 保存数据更改并同步索引
+        /// </summary>
+        /// <param name="index">创建索引</param>
+        /// <returns></returns>
+        Task<int> SaveChangesAsync(bool index = true);
+
+        /// <summary>
+        /// 执行搜索并将结果限制为特定类型,在返回之前,搜索结果将转换为相关类型
+        /// </summary>
+        /// <param name ="options">搜索选项</param>
+        IScoredSearchResultCollection<ILuceneIndexable> ScoredSearch(SearchOptions options);
+
+        /// <summary>
+        /// 执行搜索并将结果限制为特定类型,在返回之前,搜索结果将转换为相关类型
+        /// </summary>
+        /// <typeparam name ="T">要搜索的实体类型 - 注意:必须实现ILuceneIndexable </typeparam>
+        /// <param name ="options">搜索选项</param>
+        IScoredSearchResultCollection<T> ScoredSearch<T>(SearchOptions options);
+
+        /// <summary>
+        /// 执行搜索并将结果限制为特定类型,在返回之前,搜索结果将转换为相关类型,但不返回任何评分信息
+        /// </summary>
+        /// <param name ="options">搜索选项</param>
+        /// <returns></returns>
+        ISearchResultCollection<ILuceneIndexable> Search(SearchOptions options);
+
+        /// <summary>
+        /// 执行搜索并将结果限制为特定类型,在返回之前,搜索结果将转换为相关类型,但不返回任何评分信息
+        /// </summary>
+        /// <typeparam name ="T">要搜索的实体类型 - 注意:必须实现ILuceneIndexable </typeparam>
+        /// <param name ="options">搜索选项</param>
+        /// <returns></returns>
+        ISearchResultCollection<T> Search<T>(SearchOptions options);
+    }
+}

+ 26 - 0
Masuit.LuceneEFCore.SearchEngine/Interfaces/ISearchResultCollection.cs

@@ -0,0 +1,26 @@
+using System.Collections.Generic;
+
+namespace Masuit.LuceneEFCore.SearchEngine.Interfaces
+{
+    /// <summary>
+    /// 搜索结果集
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    public interface ISearchResultCollection<T>
+    {
+        /// <summary>
+        /// 总条数
+        /// </summary>
+        int TotalHits { get; set; }
+
+        /// <summary>
+        /// 耗时
+        /// </summary>
+        long Elapsed { get; set; }
+
+        /// <summary>
+        /// 结果集
+        /// </summary>
+        IList<T> Results { get; set; }
+    }
+}

+ 41 - 0
Masuit.LuceneEFCore.SearchEngine/LuceneIndexChange.cs

@@ -0,0 +1,41 @@
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 索引修改实体
+    /// </summary>
+    public class LuceneIndexChange
+    {
+        /// <summary>
+        /// 实体类
+        /// </summary>
+        public ILuceneIndexable Entity { get; set; }
+
+        /// <summary>
+        /// 变更状态
+        /// </summary>
+        public LuceneIndexState State { get; set; }
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        /// <param name="entity">实体</param>
+        public LuceneIndexChange(ILuceneIndexable entity)
+        {
+            Entity = entity;
+            State = LuceneIndexState.NotSet;
+        }
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        /// <param name="entity">实体</param>
+        /// <param name="state">变更状态</param>
+        public LuceneIndexChange(ILuceneIndexable entity, LuceneIndexState state)
+        {
+            Entity = entity;
+            State = state;
+        }
+    }
+}

+ 66 - 0
Masuit.LuceneEFCore.SearchEngine/LuceneIndexChangeset.cs

@@ -0,0 +1,66 @@
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 索引变更集
+    /// </summary>
+    public class LuceneIndexChangeset
+    {
+        /// <summary>
+        /// 实体集
+        /// </summary>
+        public IList<LuceneIndexChange> Entries { get; set; }
+
+        /// <summary>
+        /// 实体是否有某种状态
+        /// </summary>
+        /// <param name="state">状态</param>
+        /// <returns></returns>
+        private bool EntriesHaveState(LuceneIndexState state)
+        {
+            return Entries.Any(x => x.State == state);
+        }
+
+        /// <summary>
+        /// 已经被添加?
+        /// </summary>
+        public bool HasAdds => EntriesHaveState(LuceneIndexState.Added);
+
+        /// <summary>
+        /// 已经被更新?
+        /// </summary>
+        public bool HasUpdates => EntriesHaveState(LuceneIndexState.Updated);
+
+        /// <summary>
+        /// 已经被删除?
+        /// </summary>
+        public bool HasDeletes => EntriesHaveState(LuceneIndexState.Removed);
+
+        /// <summary>
+        /// 已经被修改
+        /// </summary>
+        public bool HasChanges => Entries.Any() && (HasAdds || HasUpdates || HasDeletes);
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        public LuceneIndexChangeset()
+        {
+            Entries = new List<LuceneIndexChange>();
+        }
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        /// <param name="change">被修改的实体</param>
+        public LuceneIndexChangeset(LuceneIndexChange change)
+        {
+            Entries = new List<LuceneIndexChange>
+            {
+                change
+            };
+        }
+    }
+}

+ 204 - 0
Masuit.LuceneEFCore.SearchEngine/LuceneIndexSearcher.cs

@@ -0,0 +1,204 @@
+using Lucene.Net.Analysis;
+using Lucene.Net.Documents;
+using Lucene.Net.Index;
+using Lucene.Net.QueryParsers.Classic;
+using Lucene.Net.Search;
+using Lucene.Net.Store;
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    public class LuceneIndexSearcher : ILuceneIndexSearcher
+    {
+        private static Directory directory;
+        private static Analyzer analyzer;
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        /// <param name="directory">索引目录</param>
+        /// <param name="analyzer">索引分析器</param>
+        public LuceneIndexSearcher(Directory directory, Analyzer analyzer)
+        {
+            LuceneIndexSearcher.directory = directory;
+            LuceneIndexSearcher.analyzer = analyzer;
+        }
+
+        /// <summary>
+        /// 分词模糊查询
+        /// </summary>
+        /// <param name="parser">条件</param>
+        /// <param name="keywords">关键词</param>
+        /// <returns></returns>
+        private BooleanQuery GetFuzzyquery(MultiFieldQueryParser parser, string keywords)
+        {
+            var finalQuery = new BooleanQuery();
+
+            string[] terms = keywords.Split(new[] //todo:分词
+            {
+                " "
+            }, StringSplitOptions.RemoveEmptyEntries);
+
+            foreach (var term in terms)
+            {
+                finalQuery.Add(parser.Parse(term.Replace("~", "") + "~"), Occur.MUST);
+            }
+            return finalQuery;
+        }
+
+        /// <summary>
+        /// 执行搜索
+        /// </summary>
+        /// <param name="options">搜索选项</param>
+        /// <param name="safeSearch">启用安全搜索</param>
+        /// <returns></returns>
+        private ILuceneSearchResultCollection PerformSearch(SearchOptions options, bool safeSearch)
+        {
+            // 结果集
+            ILuceneSearchResultCollection results = new LuceneSearchResultCollection();
+
+            using (var reader = DirectoryReader.Open(directory))
+            {
+                var searcher = new IndexSearcher(reader);
+                Query query;
+
+                // 启用安全搜索
+                if (safeSearch)
+                {
+                    options.Keywords = QueryParserBase.Escape(options.Keywords);
+                }
+
+                if (options.Fields.Count == 1)
+                {
+                    // 单字段搜索
+                    QueryParser queryParser = new QueryParser(Lucene.Net.Util.LuceneVersion.LUCENE_48, options.Fields[0], analyzer);
+                    query = queryParser.Parse(options.Keywords);
+                }
+                else
+                {
+                    // 多字段搜索
+                    MultiFieldQueryParser multiFieldQueryParser = new MultiFieldQueryParser(Lucene.Net.Util.LuceneVersion.LUCENE_48, options.Fields.ToArray(), analyzer, options.Boosts);
+                    query = GetFuzzyquery(multiFieldQueryParser, options.Keywords);
+                }
+
+                List<SortField> sortFields = new List<SortField>
+                {
+                    SortField.FIELD_SCORE
+                };
+
+                // 排序规则处理
+                foreach (var sortField in options.OrderBy)
+                {
+                    sortFields.Add(new SortField(sortField, SortFieldType.STRING));
+                }
+
+                Sort sort = new Sort(sortFields.ToArray());
+                ScoreDoc[] matches = searcher.Search(query, null, options.MaximumNumberOfHits, sort, true, true).ScoreDocs;
+                results.TotalHits = matches.Length;
+
+                // 分页处理
+                if (options.Skip.HasValue)
+                {
+                    matches = matches.Skip(options.Skip.Value).ToArray();
+                }
+                if (options.Take.HasValue)
+                {
+                    matches = matches.Take(options.Take.Value).ToArray();
+                }
+
+                // 创建结果集
+                foreach (var match in matches)
+                {
+                    var id = match.Doc;
+                    var doc = searcher.Doc(id);
+
+                    // 过滤掉已经设置了类型的对象
+                    if (options.Type != null)
+                    {
+                        var t = doc.Get("Type");
+                        if (options.Type.AssemblyQualifiedName == t)
+                        {
+                            results.Results.Add(new LuceneSearchResult()
+                            {
+                                Score = match.Score,
+                                Document = doc
+                            });
+                        }
+                    }
+                    else
+                    {
+                        results.Results.Add(new LuceneSearchResult()
+                        {
+                            Score = match.Score,
+                            Document = doc
+                        });
+                    }
+                }
+            }
+
+            return results;
+        }
+
+        /// <summary>
+        /// 搜索单条记录
+        /// </summary>
+        /// <param name="options"></param>
+        /// <returns></returns>
+        public Document ScoredSearchSingle(SearchOptions options)
+        {
+            options.MaximumNumberOfHits = 1;
+            var results = ScoredSearch(options);
+            return results.TotalHits > 0 ? results.Results.First().Document : null;
+        }
+
+        /// <summary>
+        /// 按权重搜索
+        /// </summary>
+        /// <param name="options">搜索选项</param>
+        /// <returns></returns>
+        public ILuceneSearchResultCollection ScoredSearch(SearchOptions options)
+        {
+            Stopwatch sw = new Stopwatch();
+            sw.Start();
+
+            ILuceneSearchResultCollection results;
+
+            try
+            {
+                results = PerformSearch(options, false);
+            }
+            catch (ParseException)
+            {
+                results = PerformSearch(options, true);
+            }
+
+            sw.Stop();
+            results.Elapsed = sw.ElapsedMilliseconds;
+
+            return results;
+        }
+
+        /// <summary>
+        /// 按权重搜索
+        /// </summary>
+        /// <param name="keywords">关键词</param>
+        /// <param name="fields">限定检索字段</param>
+        /// <param name="maximumNumberOfHits">最大检索量</param>
+        /// <param name="boosts">加速器</param>
+        /// <param name="type">文档类型</param>
+        /// <param name="sortBy">排序规则</param>
+        /// <param name="skip">跳过多少条</param>
+        /// <param name="take">取多少条</param>
+        /// <returns></returns>
+        public ILuceneSearchResultCollection ScoredSearch(string keywords, string fields, int maximumNumberOfHits, Dictionary<string, float> boosts, Type type, string sortBy, int? skip, int? take)
+        {
+            SearchOptions options = new SearchOptions(keywords, fields, maximumNumberOfHits, boosts, type, sortBy, skip, take);
+
+            return ScoredSearch(options);
+        }
+    }
+}

+ 33 - 0
Masuit.LuceneEFCore.SearchEngine/LuceneIndexState.cs

@@ -0,0 +1,33 @@
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 索引状态枚举
+    /// </summary>
+    public enum LuceneIndexState
+    {
+        /// <summary>
+        /// 已添加
+        /// </summary>
+        Added,
+
+        /// <summary>
+        /// 被删除
+        /// </summary>
+        Removed,
+
+        /// <summary>
+        /// 被更新
+        /// </summary>
+        Updated,
+
+        /// <summary>
+        /// 未作修改
+        /// </summary>
+        Unchanged,
+
+        /// <summary>
+        /// 不需要修改
+        /// </summary>
+        NotSet
+    }
+}

+ 39 - 0
Masuit.LuceneEFCore.SearchEngine/LuceneIndexableAttribute.cs

@@ -0,0 +1,39 @@
+using Lucene.Net.Documents;
+using System;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 标记该字段可被索引
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Property)]
+    public class LuceneIndexableAttribute : Attribute
+    {
+        public LuceneIndexableAttribute()
+        {
+            Index = Field.Index.ANALYZED;
+            Store = Field.Store.YES;
+            IsHtml = false;
+        }
+
+        /// <summary>
+        /// 索引字段名
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 索引行为
+        /// </summary>
+        public Field.Index Index { get; set; }
+
+        /// <summary>
+        /// 是否被存储到索引库
+        /// </summary>
+        public Field.Store Store { get; set; }
+
+        /// <summary>
+        /// 是否是html
+        /// </summary>
+        public bool IsHtml { get; set; }
+    }
+}

+ 62 - 0
Masuit.LuceneEFCore.SearchEngine/LuceneIndexableBaseEntity.cs

@@ -0,0 +1,62 @@
+using Lucene.Net.Documents;
+using Masuit.LuceneEFCore.SearchEngine.Helpers;
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Reflection;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 需要被索引的实体基类
+    /// </summary>
+    public abstract class LuceneIndexableBaseEntity : ILuceneIndexable
+    {
+        /// <summary>
+        /// 主键id
+        /// </summary>
+        [LuceneIndexable(Name = "Id", Store = Field.Store.YES, Index = Field.Index.NOT_ANALYZED), Key]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 索引唯一id
+        /// </summary>
+        [LuceneIndexable(Name = "IndexId", Store = Field.Store.YES, Index = Field.Index.NOT_ANALYZED)]
+        [NotMapped]
+        public string IndexId
+        {
+            get => GetType().Name + ":" + Id;
+            set
+            {
+            }
+        }
+
+        /// <summary>
+        /// 转换成Lucene文档
+        /// </summary>
+        /// <returns></returns>
+        public virtual Document ToDocument()
+        {
+            Document doc = new Document();
+            PropertyInfo[] classProperties = GetType().GetProperties();
+            doc.Add(new Field("Type", GetType().AssemblyQualifiedName, Field.Store.YES, Field.Index.NOT_ANALYZED));
+            foreach (PropertyInfo propertyInfo in classProperties)
+            {
+                object propertyValue = propertyInfo.GetValue(this);
+                if (propertyValue != null)
+                {
+                    IEnumerable<LuceneIndexableAttribute> attrs = propertyInfo.GetCustomAttributes<LuceneIndexableAttribute>();
+                    foreach (LuceneIndexableAttribute attr in attrs)
+                    {
+                        string name = !string.IsNullOrEmpty(attr.Name) ? attr.Name : propertyInfo.Name;
+                        string value = attr.IsHtml ? StringHelpers.RemoveUnwantedTags(propertyValue.ToString()) : propertyValue.ToString();
+                        doc.Add(new Field(name, value, attr.Store, attr.Index));
+                    }
+                }
+            }
+
+            return doc;
+        }
+    }
+}

+ 172 - 0
Masuit.LuceneEFCore.SearchEngine/LuceneIndexer.cs

@@ -0,0 +1,172 @@
+using Lucene.Net.Analysis;
+using Lucene.Net.Index;
+using Lucene.Net.Store;
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+using System;
+using System.Collections.Generic;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    public class LuceneIndexer : ILuceneIndexer
+    {
+        /// <summary>
+        /// 索引目录
+        /// </summary>
+        private static Directory _directory;
+
+        /// <summary>
+        /// 索引分析器
+        /// </summary>
+        private static Analyzer _analyzer;
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        /// <param name="directory"></param>
+        /// <param name="analyzer"></param>
+        public LuceneIndexer(Directory directory, Analyzer analyzer)
+        {
+            _directory = directory;
+            _analyzer = analyzer;
+        }
+
+        /// <summary>
+        /// 添加到索引
+        /// </summary>
+        /// <param name="entity">实体</param>
+        public void Add(ILuceneIndexable entity)
+        {
+            Update(new LuceneIndexChange(entity, LuceneIndexState.Added));
+        }
+
+        /// <summary>
+        /// 创建索引
+        /// </summary>
+        /// <param name="entities">实体集</param>
+        /// <param name="recreate">是否需要覆盖</param>
+        public void CreateIndex(IEnumerable<ILuceneIndexable> entities, bool recreate = true)
+        {
+            IndexWriterConfig config = new IndexWriterConfig(Lucene.Net.Util.LuceneVersion.LUCENE_48, _analyzer);
+
+            using (var writer = new IndexWriter(_directory, config))
+            {
+                // 删除重建
+                if (recreate)
+                {
+                    writer.DeleteAll();
+                    writer.Commit();
+                }
+
+                // 遍历实体集,添加到索引库
+                foreach (var entity in entities)
+                {
+                    writer.AddDocument(entity.ToDocument());
+                }
+                writer.Flush(true, true);
+            }
+        }
+
+        /// <summary>
+        /// 删除索引
+        /// </summary>
+        /// <param name="entity">实体</param>
+        public void Delete(ILuceneIndexable entity)
+        {
+            Update(new LuceneIndexChange(entity, LuceneIndexState.Removed));
+        }
+
+        /// <summary>
+        /// 删除所有索引
+        /// </summary>
+        /// <param name="commit">是否提交</param>
+        public void DeleteAll(bool commit = true)
+        {
+            IndexWriterConfig config = new IndexWriterConfig(Lucene.Net.Util.LuceneVersion.LUCENE_48, _analyzer);
+
+            using (var writer = new IndexWriter(_directory, config))
+            {
+                try
+                {
+                    writer.DeleteAll();
+                    if (commit)
+                    {
+                        writer.Commit();
+                    }
+                    writer.Flush(true, true);
+                }
+                catch (Exception ex)
+                {
+                    Console.WriteLine(ex.Message);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 更新索引
+        /// </summary>
+        /// <param name="entity">实体</param>
+        public void Update(ILuceneIndexable entity)
+        {
+            Update(new LuceneIndexChange(entity, LuceneIndexState.Updated));
+        }
+
+        /// <summary>
+        /// 更新索引
+        /// </summary>
+        /// <param name="change">实体</param>
+        public void Update(LuceneIndexChange change)
+        {
+            LuceneIndexChangeset changeset = new LuceneIndexChangeset(change);
+            Update(changeset);
+        }
+
+        /// <summary>
+        /// 更新索引
+        /// </summary>
+        /// <param name="changeset">实体</param>
+        public void Update(LuceneIndexChangeset changeset)
+        {
+            IndexWriterConfig config = new IndexWriterConfig(Lucene.Net.Util.LuceneVersion.LUCENE_48, _analyzer);
+            using (var writer = new IndexWriter(_directory, config))
+            {
+                foreach (var change in changeset.Entries)
+                {
+                    switch (change.State)
+                    {
+                        case LuceneIndexState.Added:
+                            writer.AddDocument(change.Entity.ToDocument());
+                            break;
+                        case LuceneIndexState.Removed:
+                            writer.DeleteDocuments(new Term("IndexId", change.Entity.IndexId));
+                            break;
+                        case LuceneIndexState.Updated:
+                            writer.UpdateDocument(new Term("IndexId", change.Entity.IndexId), change.Entity.ToDocument());
+                            break;
+                    }
+                }
+
+                writer.Flush(true, changeset.HasDeletes);
+            }
+        }
+
+        /// <summary>
+        /// 索引库数量
+        /// </summary>
+        /// <returns></returns>
+        public int Count()
+        {
+            try
+            {
+                IndexReader reader = DirectoryReader.Open(_directory);
+
+                return reader.NumDocs;
+            }
+            catch (IndexNotFoundException ex)
+            {
+                _directory.ClearLock("write.lock");
+                Console.WriteLine(ex.Message);
+                return 0;
+            }
+        }
+    }
+}

+ 23 - 0
Masuit.LuceneEFCore.SearchEngine/LuceneIndexerOptions.cs

@@ -0,0 +1,23 @@
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 索引器选项
+    /// </summary>
+    public class LuceneIndexerOptions
+    {
+        /// <summary>
+        /// 使用内存目录
+        /// </summary>
+        public bool UseRamDirectory { get; set; }
+
+        /// <summary>
+        /// 索引路径
+        /// </summary>
+        public string Path { get; set; }
+
+        /// <summary>
+        /// 最大字段数
+        /// </summary>
+        public int? MaximumFieldLength { get; set; }
+    }
+}

+ 21 - 0
Masuit.LuceneEFCore.SearchEngine/LuceneSearchResult.cs

@@ -0,0 +1,21 @@
+using Lucene.Net.Documents;
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 搜索结果
+    /// </summary>
+    public class LuceneSearchResult : ILuceneSearchResult
+    {
+        /// <summary>
+        /// 匹配度
+        /// </summary>
+        public float Score { get; set; }
+
+        /// <summary>
+        /// 文档
+        /// </summary>
+        public Document Document { get; set; }
+    }
+}

+ 26 - 0
Masuit.LuceneEFCore.SearchEngine/LuceneSearchResultCollection.cs

@@ -0,0 +1,26 @@
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+using System.Collections.Generic;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 搜索结果集
+    /// </summary>
+    public class LuceneSearchResultCollection : ILuceneSearchResultCollection
+    {
+        /// <summary>
+        /// 结果集
+        /// </summary>
+        public IList<ILuceneSearchResult> Results { get; set; } = new List<ILuceneSearchResult>();
+
+        /// <summary>
+        /// 耗时
+        /// </summary>
+        public long Elapsed { get; set; }
+
+        /// <summary>
+        /// 总条数
+        /// </summary>
+        public int TotalHits { get; set; }
+    }
+}

+ 15 - 0
Masuit.LuceneEFCore.SearchEngine/Masuit.LuceneEFCore.SearchEngine.csproj

@@ -0,0 +1,15 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.0</TargetFramework>
+  </PropertyGroup>
+  <ItemGroup>
+    <PackageReference Include="HtmlAgilityPack" Version="1.8.14" />
+    <PackageReference Include="JieBa.Lucene.Analyzer" Version="1.0.1" />
+    <PackageReference Include="Lucene.Net" Version="4.8.0-beta00005" />
+    <PackageReference Include="Lucene.Net.QueryParser" Version="4.8.0-beta00005" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.1" />
+    <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
+  </ItemGroup>
+
+</Project>

+ 21 - 0
Masuit.LuceneEFCore.SearchEngine/ScoredSearchResult.cs

@@ -0,0 +1,21 @@
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 搜索结果项
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    public class ScoredSearchResult<T> : IScoredSearchResult<T>
+    {
+        /// <summary>
+        /// 匹配度
+        /// </summary>
+        public float Score { get; set; }
+
+        /// <summary>
+        /// 物理实体
+        /// </summary>
+        public T Entity { get; set; }
+    }
+}

+ 27 - 0
Masuit.LuceneEFCore.SearchEngine/ScoredSearchResultCollection.cs

@@ -0,0 +1,27 @@
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+using System.Collections.Generic;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 搜索结果集
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    public class ScoredSearchResultCollection<T> : IScoredSearchResultCollection<T>
+    {
+        /// <summary>
+        /// 结果集
+        /// </summary>
+        public IList<IScoredSearchResult<T>> Results { get; set; } = new List<IScoredSearchResult<T>>();
+
+        /// <summary>
+        /// 耗时
+        /// </summary>
+        public long Elapsed { get; set; }
+
+        /// <summary>
+        /// 总条数
+        /// </summary>
+        public int TotalHits { get; set; }
+    }
+}

+ 302 - 0
Masuit.LuceneEFCore.SearchEngine/SearchContextProvider.cs

@@ -0,0 +1,302 @@
+using JiebaNet.Segmenter;
+using Lucene.Net.Analysis;
+using Lucene.Net.Analysis.JieBa;
+using Lucene.Net.Documents;
+using Lucene.Net.Store;
+using Masuit.LuceneEFCore.SearchEngine.Helpers;
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Reflection;
+using System.Threading.Tasks;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 搜索引擎
+    /// </summary>
+    /// <typeparam name="TContext"></typeparam>
+    public class SearchContextProvider<TContext> : ISearchContextProvider<TContext> where TContext : DbContext
+    {
+        /// <summary>
+        /// 数据库上下文
+        /// </summary>
+        public TContext Context { get; protected set; }
+
+        private static Directory directory;
+        private static Analyzer analyzer;
+        private static LuceneIndexer indexer;
+        private static LuceneIndexSearcher searcher;
+        private static bool isInitialized = false;
+
+        /// <summary>
+        /// 搜索引擎
+        /// </summary>
+        /// <param name="indexerOptions">索引选项</param>
+        /// <param name="context">数据库上下文</param>
+        /// <param name="overrideIfExists">是否被覆盖</param>
+        public SearchContextProvider(LuceneIndexerOptions indexerOptions, TContext context, bool overrideIfExists = false)
+        {
+            if (isInitialized == false || overrideIfExists)
+            {
+                InitializeLucene(indexerOptions);
+            }
+
+            Context = context;
+        }
+
+        /// <summary>
+        /// 初始化索引库
+        /// </summary>
+        /// <param name="options"></param>
+        private void InitializeLucene(LuceneIndexerOptions options)
+        {
+            if (options.UseRamDirectory)
+            {
+                directory = new RAMDirectory();
+            }
+            else
+            {
+                if (directory == null)
+                {
+                    directory = FSDirectory.Open(options.Path);
+                }
+            }
+
+            analyzer = new JieBaAnalyzer(TokenizerMode.Search);
+            indexer = new LuceneIndexer(directory, analyzer);
+            searcher = new LuceneIndexSearcher(directory, analyzer);
+        }
+
+        /// <summary>
+        /// 检查数据库上下文更改,并返回LuceneIndexChanges类型的集合
+        /// </summary>
+        /// <returns> LuceneIndexChangeset  - 转换为LuceneIndexChanges类型的实体更改集合</returns>
+        private LuceneIndexChangeset GetChangeset()
+        {
+            LuceneIndexChangeset changes = new LuceneIndexChangeset();
+
+            foreach (var entity in Context.ChangeTracker.Entries().Where(x => x.State != EntityState.Unchanged))
+            {
+                Type entityType = entity.Entity.GetType();
+                bool implementsILuceneIndexable = typeof(ILuceneIndexable).IsAssignableFrom(entityType);
+                if (implementsILuceneIndexable)
+                {
+                    MethodInfo method = entityType.GetMethod("ToDocument");
+                    if (method != null)
+                    {
+                        LuceneIndexChange change = new LuceneIndexChange(entity.Entity as ILuceneIndexable);
+
+                        switch (entity.State)
+                        {
+                            case EntityState.Added:
+                                change.State = LuceneIndexState.Added;
+                                break;
+                            case EntityState.Deleted:
+                                change.State = LuceneIndexState.Removed;
+                                break;
+                            case EntityState.Modified:
+                                change.State = LuceneIndexState.Updated;
+                                break;
+                            default:
+                                change.State = LuceneIndexState.Unchanged;
+                                break;
+                        }
+                        changes.Entries.Add(change);
+                    }
+                }
+            }
+
+            return changes;
+        }
+
+        /// <summary>
+        ///获取文档的具体版本
+        /// </summary>
+        /// <param name ="doc">要转换的文档</param>
+        /// <returns></returns>
+        private ILuceneIndexable GetConcreteFromDocument(Document doc)
+        {
+            Type t = Type.GetType(doc.Get("Type"));
+            var obj = t.Assembly.CreateInstance(t.FullName, true) as ILuceneIndexable;
+            foreach (var p in t.GetProperties())
+            {
+                if (p.GetCustomAttributes<LuceneIndexableAttribute>().Any())
+                {
+                    p.SetValue(obj, doc.Get(p.Name, p.PropertyType));
+                }
+            }
+            return obj;
+        }
+
+
+        /// <summary>
+        /// 保存数据更改并同步索引
+        /// </summary>
+        /// <returns></returns>
+        public int SaveChanges(bool index = true)
+        {
+            int result = 0;
+
+            if (Context.ChangeTracker.HasChanges())
+            {
+                // 获取要变更的实体集
+                LuceneIndexChangeset changes = GetChangeset();
+                result = Context.SaveChanges();
+                if (changes.HasChanges && index)
+                {
+                    indexer.Update(changes);
+                }
+            }
+
+            return result;
+        }
+
+        /// <summary>
+        /// 保存数据更改并同步索引
+        /// </summary>
+        /// <param name="index">是否需要被重新索引</param>
+        /// <returns></returns>
+        public async Task<int> SaveChangesAsync(bool index = true)
+        {
+            int result = 0;
+
+            if (Context.ChangeTracker.HasChanges())
+            {
+                // 获取要变更的结果集
+                LuceneIndexChangeset changes = GetChangeset();
+                result = await Context.SaveChangesAsync();
+                if (changes.HasChanges && index)
+                {
+                    indexer.Update(changes);
+                }
+            }
+
+            return result;
+        }
+
+        /// <summary>
+        /// 索引条数
+        /// </summary>
+        public int IndexCount => indexer.Count();
+
+        /// <summary>
+        /// 删除索引
+        /// </summary>
+        public void DeleteIndex()
+        {
+            indexer?.DeleteAll();
+        }
+
+        /// <summary>
+        /// 扫描数据库上下文并对所有已实现ILuceneIndexable的对象,并创建索引
+        /// </summary>
+        public void CreateIndex()
+        {
+            if (indexer != null)
+            {
+                List<ILuceneIndexable> index = new List<ILuceneIndexable>();
+                PropertyInfo[] properties = Context.GetType().GetProperties();
+                foreach (PropertyInfo pi in properties)
+                {
+                    if (typeof(IEnumerable<ILuceneIndexable>).IsAssignableFrom(pi.PropertyType))
+                    {
+                        var entities = Context.GetType().GetProperty(pi.Name).GetValue(Context, null);
+                        index.AddRange(entities as IEnumerable<ILuceneIndexable>);
+                    }
+                }
+
+                if (index.Any())
+                {
+                    indexer.CreateIndex(index);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 执行搜索并将结果限制为特定类型,在返回之前,搜索结果将转换为相关类型,但不返回任何评分信息
+        /// </summary>
+        /// <typeparam name ="T">要搜索的实体类型 - 注意:必须实现ILuceneIndexable </typeparam>
+        /// <param name ="options">搜索选项</param>
+        /// <returns></returns>
+        public ISearchResultCollection<T> Search<T>(SearchOptions options)
+        {
+            options.Type = typeof(T);
+            var indexResults = searcher.ScoredSearch(options);
+
+            ISearchResultCollection<T> resultSet = new SearchResultCollection<T>()
+            {
+                TotalHits = indexResults.TotalHits
+            };
+
+            Stopwatch sw = new Stopwatch();
+            sw.Start();
+            foreach (var indexResult in indexResults.Results)
+            {
+                T entity = (T)GetConcreteFromDocument(indexResult.Document);
+                resultSet.Results.Add(entity);
+            }
+            sw.Stop();
+            resultSet.Elapsed = indexResults.Elapsed + sw.ElapsedMilliseconds;
+
+            return resultSet;
+        }
+
+        /// <summary>
+        /// 执行搜索并将结果限制为特定类型,在返回之前,搜索结果将转换为相关类型,但不返回任何评分信息
+        /// </summary>
+        /// <typeparam name ="T">要搜索的实体类型 - 注意:必须实现ILuceneIndexable </typeparam>
+        /// <param name ="options">搜索选项</param>
+        /// <returns></returns>
+        public IScoredSearchResultCollection<T> ScoredSearch<T>(SearchOptions options)
+        {
+            // 确保类型匹配
+            if (typeof(T) != typeof(ILuceneIndexable))
+            {
+                options.Type = typeof(T);
+            }
+
+            var indexResults = searcher.ScoredSearch(options);
+
+            IScoredSearchResultCollection<T> results = new ScoredSearchResultCollection<T>();
+            results.TotalHits = indexResults.TotalHits;
+
+            Stopwatch sw = new Stopwatch();
+            sw.Start();
+            foreach (var indexResult in indexResults.Results)
+            {
+                IScoredSearchResult<T> result = new ScoredSearchResult<T>();
+                result.Score = indexResult.Score;
+                result.Entity = (T)GetConcreteFromDocument(indexResult.Document);
+                results.Results.Add(result);
+            }
+            sw.Stop();
+            results.Elapsed = indexResults.Elapsed + sw.ElapsedMilliseconds;
+
+            return results;
+        }
+
+        /// <summary>
+        /// 执行搜索并将结果限制为特定类型,在返回之前,搜索结果将转换为相关类型
+        /// </summary>
+        /// <param name ="options">搜索选项</param>
+        /// <returns></returns>
+        public IScoredSearchResultCollection<ILuceneIndexable> ScoredSearch(SearchOptions options)
+        {
+            return ScoredSearch<ILuceneIndexable>(options);
+        }
+
+        /// <summary>
+        /// 执行搜索并将结果限制为特定类型,在返回之前,搜索结果将转换为相关类型
+        /// </summary>
+        /// <param name ="options">搜索选项</param>
+        /// <returns></returns>
+        public ISearchResultCollection<ILuceneIndexable> Search(SearchOptions options)
+        {
+            return Search<ILuceneIndexable>(options);
+        }
+    }
+}

+ 149 - 0
Masuit.LuceneEFCore.SearchEngine/SearchOptions.cs

@@ -0,0 +1,149 @@
+using Masuit.LuceneEFCore.SearchEngine.Helpers;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 搜索选项
+    /// </summary>
+    public class SearchOptions
+    {
+        /// <summary>
+        /// 关键词
+        /// </summary>
+        public string Keywords { get; set; }
+
+        /// <summary>
+        /// 限定搜索字段
+        /// </summary>
+        public List<string> Fields { get; set; }
+
+        /// <summary>
+        /// 最大检索量
+        /// </summary>
+        public int MaximumNumberOfHits { get; set; }
+
+        /// <summary>
+        /// 加速器
+        /// </summary>
+        private Dictionary<string, float> boosts;
+
+        /// <summary>
+        /// 加速器
+        /// </summary>
+        public Dictionary<string, float> Boosts
+        {
+            get
+            {
+                foreach (var field in Fields)
+                {
+                    if (boosts.All(x => x.Key.ToUpper() != field.ToUpper()))
+                    {
+                        boosts.Add(field, 1.0f);
+                    }
+                }
+
+                return boosts;
+            }
+        }
+
+        /// <summary>
+        /// 排序字段
+        /// </summary>
+        public List<string> OrderBy { get; set; }
+
+        /// <summary>
+        /// 跳过多少条
+        /// </summary>
+        public int? Skip { get; set; }
+
+        /// <summary>
+        /// 取多少条
+        /// </summary>
+        public int? Take { get; set; }
+
+        /// <summary>
+        /// 文档类型
+        /// </summary>
+        public Type Type { get; set; }
+
+        /// <summary>
+        /// 清除加速器
+        /// </summary>
+        public void ClearBoosts()
+        {
+            boosts.Clear();
+        }
+
+        /// <summary>
+        /// 添加加速器
+        /// </summary>
+        /// <param name="key"></param>
+        /// <param name="value"></param>
+        public void SetBoost(string key, float value)
+        {
+            boosts[key] = value;
+        }
+
+        /// <summary>
+        /// 设置加速器
+        /// </summary>
+        /// <param name="boosts"></param>
+        public void SetBoosts(Dictionary<string, float> boosts)
+        {
+            this.boosts = boosts;
+        }
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        public SearchOptions()
+        {
+            Fields = new List<string>();
+            OrderBy = new List<string>();
+            MaximumNumberOfHits = 10000;
+            boosts = new Dictionary<string, float>();
+        }
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        /// <param name="keywords">关键词</param>
+        /// <param name="fields">限定检索字段</param>
+        /// <param name="maximumNumberOfHits">最大检索量</param>
+        /// <param name="boosts">加速器</param>
+        /// <param name="type">文档类型</param>
+        /// <param name="orderBy">排序字段</param>
+        /// <param name="skip">跳过多少条</param>
+        /// <param name="take">取多少条</param>
+        public SearchOptions(string keywords, string fields, int maximumNumberOfHits = 10000, Dictionary<string, float> boosts = null, Type type = null, string orderBy = null, int? skip = null, int? take = null)
+        {
+            Keywords = keywords;
+            MaximumNumberOfHits = maximumNumberOfHits;
+            Skip = skip;
+            Take = take;
+            this.boosts = boosts ?? new Dictionary<string, float>();
+
+            Type = type;
+
+            Fields = new List<string>();
+            OrderBy = new List<string>();
+
+            // 添加被检索字段
+            if (!string.IsNullOrEmpty(fields))
+            {
+                fields = fields.RemoveCharacters(" ");
+                Fields.AddRange(fields.Split(',').ToList());
+            }
+
+            // 添加排序规则
+            if (!string.IsNullOrEmpty(orderBy))
+            {
+                orderBy = orderBy.RemoveCharacters(" ");
+                OrderBy.AddRange(orderBy.Split(',').ToList());
+            }
+        }
+    }
+}

+ 32 - 0
Masuit.LuceneEFCore.SearchEngine/SearchResultCollection.cs

@@ -0,0 +1,32 @@
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+using System.Collections.Generic;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    /// <summary>
+    /// 搜索结果集
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    public class SearchResultCollection<T> : ISearchResultCollection<T>
+    {
+        /// <summary>
+        /// 实体集
+        /// </summary>
+        public IList<T> Results { get; set; }
+
+        /// <summary>
+        /// 耗时
+        /// </summary>
+        public long Elapsed { get; set; }
+
+        /// <summary>
+        /// 总条数
+        /// </summary>
+        public int TotalHits { get; set; }
+
+        public SearchResultCollection()
+        {
+            Results = new List<T>();
+        }
+    }
+}