Helper.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import {
  2. KeyValuePair,
  3. FieldSchema,
  4. } from '@zilliz/milvus2-sdk-node/dist/milvus/types';
  5. export const findKeyValue = (obj: KeyValuePair[], key: string) =>
  6. obj.find(v => v.key === key)?.value;
  7. export const makeDynamicBool = () => Math.random() > 0.5;
  8. export const makeRandomInt = () => Math.floor(Math.random() * 127);
  9. export const genDataByType = ({ data_type, type_params }: FieldSchema) => {
  10. switch (data_type) {
  11. case 'Bool':
  12. return makeDynamicBool();
  13. case 'Int8':
  14. return makeRandomInt();
  15. case 'Int16':
  16. return Math.floor(Math.random() * 32767);
  17. case 'Int32':
  18. return Math.floor(Math.random() * 214748364);
  19. case 'Int64':
  20. return Math.floor(Math.random() * 214748364);
  21. case 'FloatVector':
  22. return Array.from({ length: (type_params as any)[0].value }).map(() =>
  23. Math.random()
  24. );
  25. case 'BinaryVector':
  26. return Array.from({ length: (type_params as any)[0].value / 8 }).map(
  27. () => (Math.random() > 0.5 ? 1 : 0)
  28. );
  29. case 'VarChar':
  30. return makeRandomId((type_params as any)[0].value);
  31. case 'JSON':
  32. return makeRandomJSON();
  33. }
  34. };
  35. export const genRow = (
  36. fields: FieldSchema[],
  37. enableDynamicField: boolean = false
  38. ) => {
  39. const result: any = {};
  40. fields.forEach(field => {
  41. if (!field.autoID) {
  42. result[field.name] = genDataByType(field);
  43. }
  44. });
  45. if (enableDynamicField) {
  46. result.dynamicBool = makeDynamicBool();
  47. result.dynamicInt = makeRandomInt();
  48. result.dynamicJSON = makeRandomJSON();
  49. }
  50. return result;
  51. };
  52. export const genRows = (
  53. fields: FieldSchema[],
  54. size: number,
  55. enableDynamicField: boolean = false
  56. ) => {
  57. const result = [];
  58. for (let i = 0; i < size; i++) {
  59. result[i] = genRow(fields, enableDynamicField);
  60. }
  61. return result;
  62. };
  63. export const makeRandomId = (length: number): string => {
  64. let result = '';
  65. const characters =
  66. 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  67. const charactersLength = characters.length;
  68. for (let i = 0; i < length; i++) {
  69. result += characters.charAt(Math.floor(Math.random() * charactersLength));
  70. }
  71. return result;
  72. };
  73. export const makeRandomJSON = () => {
  74. const obj: any = {};
  75. const numKeys = Math.floor(Math.random() * 10) + 1; // generate a random number of keys between 1 and 10
  76. for (let i = 0; i < numKeys; i++) {
  77. const key = `key${i}`;
  78. const value =
  79. Math.random() < 0.5 ? Math.floor(Math.random() * 100) : `value${i}`; // randomly choose between a number or a string value
  80. obj[key] = value;
  81. }
  82. const arrayKey = 'containsKey';
  83. const arrayLength = Math.floor(Math.random() * 10) + 1; // generate a random length for the array between 1 and 10
  84. const randomArray = Array.from({ length: arrayLength }, () =>
  85. Math.floor(Math.random() * 100)
  86. );
  87. obj[arrayKey] = randomArray;
  88. return obj;
  89. };