Schema: ngram.stopwords, queryFilter und inMemory ergänzen
continuous-integration/drone/push Build is passing

Der Config-Vertrag kannte nur sizes und normalize. Damit lehnte
`validate:schemas` jedes Projekt ab, das die bereits im Server vorhandenen
ngram-Optionen nutzt (additionalProperties: false), und die generierte
Schema-Referenz konnte sie nie zeigen.

Ergänzt in collection.schema.json und index.d.ts:

- stopwords: { presets?: string[], words?: string[] }
- queryFilter: { minMatchRatio?: 0..1 }
- inMemory: { enabled?, maxDocs?, maxMemoryMB? }

plus demo-api/collections/ngram-stopwords.yml als Validierungs-Fixture; ohne
Schema-Erweiterung schlägt validate:schemas dort mit "must NOT have additional
properties" fehl.
This commit is contained in:
apairon committed 2026-10-19 20:48:10 +00:00
1 parent 3bf8055539
commit 9e12a8e9c3
3 files changed
+96

No files matched your search

+32
View File
@@ -0,0 +1,32 @@
name: ngram-stopwords
uploadPath: ../media/ngram-stopwords
permissions: !include global/test-permissions.yml
fields:
- name: title
type: string
meta:
label:
de: Titel
en: Title
widget: "text"
search:
- name: fuzzy
mode: ngram
fields: [title]
autoRegenerate: true
ngram:
sizes: [2, 3]
normalize:
use: [german-umlauts]
stopwords:
presets: [de, en]
words: [zum, zur]
queryFilter:
minMatchRatio: 0.4
inMemory:
enabled: true
maxDocs: 150000
maxMemoryMB: 512
Vendored
+18
View File
@@ -81,9 +81,27 @@ declare global {
eval?: string
}
export interface NgramStopwordsConfig {
presets?: string[]
words?: string[]
}
export interface NgramQueryFilterConfig {
minMatchRatio?: number
}
export interface NgramInMemoryConfig {
enabled?: boolean
maxDocs?: number
maxMemoryMB?: number
}
export interface NgramConfig {
sizes?: number[]
normalize?: NormalizeConfig
stopwords?: NgramStopwordsConfig
queryFilter?: NgramQueryFilterConfig
inMemory?: NgramInMemoryConfig
}
export interface RrfConfig {
+46
View File
@@ -338,6 +338,52 @@
"type": "string"
}
}
},
"stopwords": {
"type": "object",
"additionalProperties": false,
"properties": {
"presets": {
"type": "array",
"items": {
"type": "string"
}
},
"words": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"queryFilter": {
"type": "object",
"additionalProperties": false,
"properties": {
"minMatchRatio": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
},
"inMemory": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {
"type": "boolean"
},
"maxDocs": {
"type": "integer",
"minimum": 0
},
"maxMemoryMB": {
"type": "integer",
"minimum": 0
}
}
}
}
},