| import { SNOWBALL_LANGUAGES } from '@/search/scripts/index/utils/constants' | |
| import type { estypes } from '@elastic/elasticsearch' | |
| import type { | |
| AnalysisSnowballLanguage, | |
| AnalysisCustomAnalyzer, | |
| } from '@elastic/elasticsearch/lib/api/types' | |
| export function getGeneralSearchSettings( | |
| language: string, | |
| verbose: boolean, | |
| ): estypes.IndicesIndexSettings { | |
| const settings: estypes.IndicesIndexSettings = { | |
| analysis: { | |
| char_filter: { | |
| hyphenation_filter: { | |
| type: 'mapping', | |
| mappings: ['- => _'], | |
| }, | |
| }, | |
| analyzer: { | |
| text_analyzer_explicit: { | |
| char_filter: ['hyphenation_filter'], | |
| filter: ['lowercase', 'stop', 'asciifolding'], | |
| tokenizer: 'standard', | |
| type: 'custom', | |
| } as AnalysisCustomAnalyzer, | |
| text_analyzer: { | |
| filter: ['lowercase', 'stop', 'asciifolding'], | |
| tokenizer: 'standard', | |
| type: 'custom', | |
| } as AnalysisCustomAnalyzer, | |
| }, | |
| filter: {}, | |
| }, | |
| } | |
| const snowballLanguage = SNOWBALL_LANGUAGES[language] | |
| if (snowballLanguage) { | |
| const textAnalyzer = settings.analysis!.analyzer!.text_analyzer as AnalysisCustomAnalyzer | |
| textAnalyzer.filter!.push('languaged_snowball') | |
| settings.analysis!.filter!['languaged_snowball'] = { | |
| type: 'snowball', | |
| language: snowballLanguage as AnalysisSnowballLanguage, | |
| } | |
| } else if (verbose) { | |
| console.warn(`No snowball language for '${language}'`) | |
| } | |
| return settings | |
| } | |
| export function getAISearchAutocompleteSettings( | |
| language: string, | |
| verbose = false, | |
| ): estypes.IndicesIndexSettings { | |
| const settings: estypes.IndicesIndexSettings = { | |
| analysis: { | |
| analyzer: { | |
| text_analyzer: { | |
| filter: ['lowercase'], | |
| tokenizer: 'standard', | |
| type: 'custom', | |
| } as AnalysisCustomAnalyzer, | |
| }, | |
| filter: {}, | |
| }, | |
| } | |
| const snowballLanguage = SNOWBALL_LANGUAGES[language] | |
| if (snowballLanguage) { | |
| const textAnalyzer = settings.analysis!.analyzer!.text_analyzer as AnalysisCustomAnalyzer | |
| textAnalyzer.filter!.push('languaged_snowball') | |
| settings.analysis!.filter!['languaged_snowball'] = { | |
| type: 'snowball', | |
| language: snowballLanguage as AnalysisSnowballLanguage, | |
| } | |
| } else if (verbose) { | |
| console.warn(`No snowball language for '${language}'`) | |
| } | |
| return settings | |
| } | |