diff --git a/components/ServerDbTable.vue b/components/ServerDbTable.vue index dade7e3ead408e20c444c8bbaa57eeefd4ce9dd0..6cd032e87759c747ce90be458755d72dab8350aa 100644 --- a/components/ServerDbTable.vue +++ b/components/ServerDbTable.vue @@ -22,6 +22,7 @@ export interface FilterItem { value: string title: string count?: number + deletable: boolean props: { [key: string]: any // title: string @@ -60,6 +61,7 @@ const computedTableHeight = computed(() => { const filterInputValues = computed(() => { + console.log("recompouted FILTER value") if (filterOrSearch.value != null) { return filterOrSearch.value.filter(({ props }) => props.type !== 'text') } else { @@ -68,17 +70,20 @@ const filterInputValues = computed(() => { }) const queryInputValue = computed(() => { + console.log("recompouted TEXT value") + if (filterOrSearch.value !== null) { const phrase = filterOrSearch.value .filter((f) => { - console.log(f) return f.props.type === 'text' }) .map((f) => { return f.value }) - .join(" ") - return `'${phrase}'` + if (phrase.length > 1) { + return `${phrase.join(" ")}` + } + else { return phrase[0] } } else { return null } @@ -107,6 +112,7 @@ const reactiveParams = reactive({ facets: ["*"], filter: [], sort: ["type:asc"], + // prefix_length: 3, // attributesToHighlight: ["*"] }) @@ -158,7 +164,6 @@ watch(msFilter, async (fos) => { }) watch(msResult, (newRes) => { - console.log("facets disti changed !!!!!!!!!!!!!") console.log(msResult) console.log(newRes) facetStore.setFacets({ facetDistribution: newRes.facetDistribution, facetStat: newRes.facetStat }) @@ -169,59 +174,73 @@ watch(msResult, (newRes) => { watch(filterInputValues, (newSoF) => { if (isFilter.value && filterInputValues.value !== null && filterInputValues.value?.length % 3 === 0) { msFilter.value = filterInputValues.value.map((it, index) => { + + const sanitizedValue = it.value.split("-")[0] if (index >= 1 && (index + 1) % 3 === 1) { - return ` AND ${it.value}` + return ` AND ${sanitizedValue}` } else if ((index + 1) % 3 === 0) { - return `"${it.value}"` + return `"${sanitizedValue}"` } else { - return `${it.value}` + return `${sanitizedValue}` } }).join("") } }) + +watch(queryInputValue, (newQuery) => { + searchOrFilter() + +}) + const filterStep = computed(() => { return filterInputValues.value !== null && filterInputValues.value.length > 0 ? filterInputValues.value?.length % 3 : null }) const operatorItems = ref([ { - type: "operator", value: '=', title: "is", props: { - type: "operator" + type: "operator", value: '=', title: "is", deletable: false, props: { + type: "operator", deletable: false } }, { - type: "operator", value: '!=', title: "is not", props: { - type: "operator" + type: "operator", value: '!=', title: "is not", deletable: false, props: { + type: "operator", + deletable: false } } ]) const autocompleteItems = computed(() => { + const index = filterOrSearch.value?.length ?? 0 + console.log(index) if (filterStep.value === null || filterStep.value === 0) { return props.facets.map(value => { return { type: "facet", - value, + value: `${value}-${index}`, title: value, + deletable: false, props: { + deletable: false, type: "facet" } } }) } if (filterStep.value === 1) { - return operatorItems.value + return operatorItems.value.map(it => { return { ...it, value: `${it.value}-${index}`, } }) } if (filterStep.value === 2) { // get the facet value if (Array.isArray(filterOrSearch.value)) { const { type, value } = filterOrSearch.value?.slice(-2, -1)[0] + const sanitizedValue = value.split("-")[0] console.log("compute new facets") const facetDistri = facetStore.facets?.facetDistribution console.log(facetDistri) - return facetDistri?.[value] ? Object.entries(facetDistri[value]).map(([key, val]) => { + return facetDistri?.[sanitizedValue] ? Object.entries(facetDistri[sanitizedValue]).map(([key, val]) => { return { - type: "value", value: key, title: key, count: val, props: { - type: 'value', count: val + type: "value", value: `${key}-${index}`, title: key, count: val, deletable: true, props: { + type: "value", count: val, deletable: true } } }) : [] @@ -247,7 +266,29 @@ function deleteOneFilter(index: number) { console.log(isFilter.value) console.log(filterOrSearch) if (isFilter.value) { + filterOrSearch.value?.splice(index - 2, 2) + console.log(filterOrSearch.value) + + } + +} + +function deleteTextFilter(index: number) { + console.log("delete text filter") + console.log(index) + console.log(isFilter.value) + console.log(filterOrSearch) + console.log(filterOrSearch.value?.length) + if (isFilter.value) { + if (index === 0) { + filterOrSearch.value?.shift() + } else { + filterOrSearch.value?.splice(index, 1) + } + console.log(filterOrSearch.value?.length) + console.log(filterOrSearch.value) + } } @@ -261,9 +302,9 @@ function clearSearch() { function runTextSearch() { if (canAddTextSearch) { - const item: FilterItem = { - type: 'text', title: search.value, value: search.value, props: { type: "text" } - } + const item: FilterItem = reactive({ + type: 'text', title: search.value, value: search.value, deletable: true, props: { type: "text", deletable: true, } + }) if (Array.isArray(filterOrSearch.value)) { filterOrSearch.value = [ ...filterOrSearch.value, item @@ -273,6 +314,8 @@ function runTextSearch() { filterOrSearch.value = [item] } search.value = "" + console.log(filterOrSearch.value.length) + console.log(filterOrSearch.value) searchOrFilter() } } @@ -287,9 +330,13 @@ function runTextSearch() { @click:appendInner="searchOrFilter" @click:clear="clearFilterOrSearch" @update:modelValue="() => clearSearch()"> <template #chip="{ props, item, index }"> - <v-chip v-if="(index + 1) % 3 === 0" v-bind="props" :text="item.raw.title" closable + + + <v-chip v-bind="props" :text="item.raw.title" :closable="item.props.deletable" + @click:close="item.props.type === 'text' ? deleteTextFilter(index) : deleteOneFilter(index)"></v-chip> + <!-- <v-chip v-if="(index + 1) % 3 === 0" v-bind="props" :text="item.raw.title" closable @click:close="deleteOneFilter(index)"></v-chip> - <v-chip v-else v-bind="props" :text="item.raw.title"></v-chip> + <v-chip v-else v-bind="props" :text="item.raw.title"></v-chip> --> </template> <template #item="{ props, item }"> <v-list-item v-bind="{ ...props, active: false, onClick: () => selectItem(item) }" :title="item.title" @@ -297,9 +344,10 @@ function runTextSearch() { </v-list-item> </template> + <!-- <template #no-data></template> <template #prepend-item> - <v-list-item v-if="canAddTextSearch" title="Text search" @click="runTextSearch"> </v-list-item> - </template> + <v-list-item v-if="canAddTextSearch" :title="`Text search: ${search}`" @click="runTextSearch"> </v-list-item> + </template> --> </v-autocomplete> </v-toolbar> <v-data-table-server v-if="!msError" v-model:page="reactiveParams.page" diff --git a/packages/df-wiki-cli/df_wiki_cli/meilisearch/__init__.py b/packages/df-wiki-cli/df_wiki_cli/meilisearch/__init__.py index 440a708d035d018dbeefecf6d1ede6cf7d7940d2..563be0c4fa41e07635d04c2f9ce6787b75d57dd0 100644 --- a/packages/df-wiki-cli/df_wiki_cli/meilisearch/__init__.py +++ b/packages/df-wiki-cli/df_wiki_cli/meilisearch/__init__.py @@ -113,6 +113,13 @@ def update_refseq( "sortFacetValuesBy": {"*": "count"}, } index.update_faceting_settings(params) + print("typo toler") + index.update_typo_tolerance( + { + "enabled": False + # "minWordSizeForTypos": {"oneTypo": 50, "twoTypos": 100} + } + ) def update_structure( @@ -155,6 +162,7 @@ def update_structure( "plddts", ] ) + index.update_typo_tolerance({"enabled": False}) def split_on_comma(str_val: str) -> List[str]: