| 132 | } |
| 133 | |
| 134 | pub fn build_article_batch(records: &[ArticleRecord]) -> Result<RecordBatch> { |
| 135 | let mut id_builder = StringBuilder::new(); |
| 136 | let mut title_builder = StringBuilder::new(); |
| 137 | let mut content_builder = StringBuilder::new(); |
| 138 | let mut content_en_builder = StringBuilder::new(); |
| 139 | let mut summary_builder = StringBuilder::new(); |
| 140 | let mut detailed_summary_builder = StringBuilder::new(); |
| 141 | let mut tags_builder = ListBuilder::new(StringBuilder::new()); |
| 142 | let mut category_builder = StringBuilder::new(); |
| 143 | let mut author_builder = StringBuilder::new(); |
| 144 | let mut date_builder = StringBuilder::new(); |
| 145 | let mut featured_builder = StringBuilder::new(); |
| 146 | let mut read_time_builder = Int32Builder::new(); |
| 147 | let mut article_kind_builder = StringBuilder::new(); |
| 148 | let mut source_url_builder = StringBuilder::new(); |
| 149 | let mut interactive_page_id_builder = StringBuilder::new(); |
| 150 | let mut vector_en_builder = |
| 151 | FixedSizeListBuilder::new(Float32Builder::new(), TEXT_VECTOR_DIM_EN as i32) |
| 152 | .with_field(Field::new_list_field(DataType::Float32, false)); |
| 153 | let mut vector_zh_builder = |
| 154 | FixedSizeListBuilder::new(Float32Builder::new(), TEXT_VECTOR_DIM_ZH as i32) |
| 155 | .with_field(Field::new_list_field(DataType::Float32, false)); |
| 156 | let mut created_at_builder = TimestampMillisecondBuilder::new(); |
| 157 | let mut updated_at_builder = TimestampMillisecondBuilder::new(); |
| 158 | |
| 159 | for record in records { |
| 160 | id_builder.append_value(&record.id); |
| 161 | title_builder.append_value(&record.title); |
| 162 | content_builder.append_value(&record.content); |
| 163 | if let Some(content_en) = &record.content_en { |
| 164 | content_en_builder.append_value(content_en); |
| 165 | } else { |
| 166 | content_en_builder.append_null(); |
| 167 | } |
| 168 | summary_builder.append_value(&record.summary); |
| 169 | if let Some(detailed_summary) = &record.detailed_summary { |
| 170 | detailed_summary_builder.append_value(detailed_summary); |
| 171 | } else { |
| 172 | detailed_summary_builder.append_null(); |
| 173 | } |
| 174 | |
| 175 | for tag in &record.tags { |
| 176 | tags_builder.values().append_value(tag); |
| 177 | } |
| 178 | tags_builder.append(true); |
| 179 | |
| 180 | category_builder.append_value(&record.category); |
| 181 | author_builder.append_value(&record.author); |
| 182 | date_builder.append_value(&record.date); |
| 183 | |
| 184 | if let Some(featured) = &record.featured_image { |
| 185 | featured_builder.append_value(featured); |
| 186 | } else { |
| 187 | featured_builder.append_null(); |
| 188 | } |
| 189 | |
| 190 | read_time_builder.append_value(record.read_time); |
| 191 | if let Some(article_kind) = &record.article_kind { |