/// <summary> /// Get a Hit model from a kusto row. /// </summary> /// <param name="row">Kusto data row.</param> /// <param name="query">QueryData containing query information.</param> /// <param name="highlighter">Lucene Highligher.</param> /// <returns>Hit model.</returns> private static Hit ReadHit(DataRow row, QueryData query, LuceneHighlighter highlighter) { Ensure.IsNotNull(row, nameof(row)); var hit = HitsFactory.Create(Random.Next().ToString(), query.IndexName); var columns = row.Table.Columns; for (int columnIndex = 0; columnIndex < row.ItemArray.Length; columnIndex++) { var columnName = columns[columnIndex].ColumnName; var columnValue = GetTypedValueFromColumn(columns[columnIndex], row[columnName]); hit.AddSource(columnName, columnValue); var highlightValue = highlighter.GetHighlightedValue(columnName, columnValue); if (!string.IsNullOrEmpty(highlightValue)) { hit.AddColumnHighlight(columnName, new List <string> { highlightValue }); } } CreateSort(hit, row, query); CreateField(hit, row, query); return(hit); }
/// <summary> /// Read Hits from KustoResponseDataSet response. /// </summary> /// <param name="kustoResponseDataSet">KustoResponseDataSet - Kusto parsed response.</param> /// <param name="query">QueryData containing query information.</param> /// <returns>IEnumerable.<Hit> - collection of hits.</returns> public IEnumerable <Hit> ReadHits(KustoResponseDataSet kustoResponseDataSet, QueryData query) { Ensure.IsNotNull(kustoResponseDataSet, nameof(kustoResponseDataSet)); if (kustoResponseDataSet[HitsTableName] != null) { using var highlighter = new LuceneHighlighter(query, Logger); return(HitsMapper.MapRowsToHits(kustoResponseDataSet[HitsTableName].TableData.Rows, query, highlighter)); } return(Enumerable.Empty <Hit>()); }
private static IEnumerable <Hit> MapAndAnalyzeRows(DataRowCollection kustoResponseDataTable, QueryData query, LuceneHighlighter highlighter) => kustoResponseDataTable.OfType <DataRow>().Select(row => ReadHit(row, query, highlighter));
/// <summary> /// Parses a kusto datatable to hits. /// </summary> /// <param name="kustoResponseDataTable">Kusto data rows.</param> /// <param name="query">QueryData containing query information.</param> /// <param name="highlighter">Lucene highlighter.</param> /// <returns>Hits IEnumerable.</returns> internal static IEnumerable <Hit> MapRowsToHits(DataRowCollection kustoResponseDataTable, QueryData query, LuceneHighlighter highlighter) { return(MapAndAnalyzeRows(kustoResponseDataTable, query, highlighter)); }