prepareDataSetSearch function

FdcPreparedDataSetSearch? prepareDataSetSearch({
  1. required FdcDataSetSearchState search,
  2. required List<FdcFieldDef> fields,
  3. required Map<String, int> fieldIndexByName,
  4. required FdcFormatSettings formatSettings,
})

Prepares normalized search state for efficient local dataset evaluation.

Implementation

FdcPreparedDataSetSearch? prepareDataSetSearch({
  required FdcDataSetSearchState search,
  required List<FdcFieldDef> fields,
  required Map<String, int> fieldIndexByName,
  required FdcFormatSettings formatSettings,
}) {
  final normalized = search.normalized();
  if (!normalized.isActive) {
    return null;
  }

  final resolvedFields = _resolveSearchFieldIndexes(
    search: normalized,
    fields: fields,
    fieldIndexByName: fieldIndexByName,
    formatSettings: formatSettings,
  );

  final phrase = _normalizeSearchPhrase(
    normalized.text,
    caseSensitive: normalized.caseSensitive,
  );
  final shouldDeduplicateTokens = _searchModeUsesWordTokens(normalized.mode);
  final tokens = _orderSearchTokensForMatching(
    _normalizeSearchTokens(
      normalized.text,
      caseSensitive: normalized.caseSensitive,
      deduplicate: shouldDeduplicateTokens,
    ),
  );
  final rawTokens = _orderSearchTokensForMatching(
    _normalizeSearchTokens(
      normalized.text,
      caseSensitive: true,
      deduplicate: shouldDeduplicateTokens,
    ),
  );
  final integerFastTokenValues = _integerFastTerms(
    rawTokens,
    formatSettings: formatSettings,
  );
  final integerFastPhrase = _integerFastPhraseForSearch(
    phrase: normalized.text,
    formatSettings: formatSettings,
  );
  final decimalFastTokenValues = _decimalFastTerms(
    rawTokens,
    formatSettings: formatSettings,
  );
  final timeFastTokenTerms = _timeFastTerms(
    rawTokens,
    formatSettings: formatSettings,
  );
  final timeFastPhrase = _timeFastPhraseForSearch(
    phrase: normalized.text,
    formatSettings: formatSettings,
  );
  final dateFastTokenTerms = _dateFastTerms(
    rawTokens,
    formatSettings: formatSettings,
  );
  final dateFastPhrase = _dateFastPhraseForSearch(
    phrase: normalized.text,
    formatSettings: formatSettings,
  );
  return FdcPreparedDataSetSearch._(
    mode: normalized.mode,
    caseSensitive: normalized.caseSensitive,
    formatSettings: formatSettings,
    phrase: phrase,
    tokens: tokens,
    fieldIndexes: resolvedFields.fieldIndexes,
    fieldDataTypes: Map<int, FdcDataType>.unmodifiable(<int, FdcDataType>{
      for (var index = 0; index < fields.length; index++)
        index: fields[index].dataType,
    }),
    fieldTextFormatters: Map<int, FdcSearchFieldTextFormatter>.unmodifiable(
      <int, FdcSearchFieldTextFormatter>{
        for (var index = 0; index < fields.length; index++)
          if (normalized.fieldTextFormatters?[FdcFieldName.normalize(
                fields[index].name,
              )] !=
              null)
            index:
                normalized.fieldTextFormatters![FdcFieldName.normalize(
                  fields[index].name,
                )]!,
      },
    ),
    fieldFormatSettings:
        Map<int, FdcFormatSettings>.unmodifiable(<int, FdcFormatSettings>{
          for (var index = 0; index < fields.length; index++)
            if (normalized.fieldFormatSettings?[FdcFieldName.normalize(
                  fields[index].name,
                )] !=
                null)
              index:
                  normalized.fieldFormatSettings![FdcFieldName.normalize(
                    fields[index].name,
                  )]!,
        }),
    integerFastTokenValues: integerFastTokenValues,
    integerFastPhraseValue: _integerFastSearchTermForText(integerFastPhrase),
    decimalFastTokenValues: decimalFastTokenValues,
    decimalFastPhraseValue: _decimalFastSearchTermForText(
      _decimalFastPhraseForSearch(
        phrase: normalized.text,
        formatSettings: formatSettings,
      ),
    ),
    structuredTimeOnly: _structuredTimeOnlyForSearch(
      timeFastPhrase: timeFastPhrase,
      fieldIndexes: resolvedFields.fieldIndexes,
      fields: fields,
    ),
    timeFastTokenTerms: timeFastTokenTerms,
    timeFastPhraseTerm: _timeFastSearchTermForText(
      timeFastPhrase,
      formatSettings: formatSettings,
    ),
    dateFastTokenTerms: dateFastTokenTerms,
    dateFastPhraseTerm: _dateFastSearchTermForText(
      dateFastPhrase,
      formatSettings: formatSettings,
    ),
  );
}