diff --git a/src/layout/MainLayout.tsx b/src/layout/MainLayout.tsx index 3ace454..637b09e 100644 --- a/src/layout/MainLayout.tsx +++ b/src/layout/MainLayout.tsx @@ -38,13 +38,14 @@ export default function MainLayout() { useState(); useEffect(() => { - const { meilisearchUrl, meilisearchToken } = selector; + const { meilisearchUrl, meilisearchToken, enableHybridSearch } = selector; const { searchClient } = instantMeiliSearch( meilisearchUrl, meilisearchToken, { finitePagination: true, meiliSearchParams: { + hybrid: enableHybridSearch ? ({} as any) : undefined, attributesToRetrieve: [ "cover", "title", diff --git a/src/page/Settings.tsx b/src/page/Settings.tsx index 2f93048..8c83b05 100644 --- a/src/page/Settings.tsx +++ b/src/page/Settings.tsx @@ -19,7 +19,7 @@ import { ThemeSetting } from "@/component/Settings/Theme"; import { disableSentry } from "@/sentry"; import store from "@/store"; import { useOptionsState } from "@/store/module/options"; -import { setMeilisearchToken, setMeilisearchUrl, setS3Url } from "@/store/reducer/options"; +import { setEnableHybridSearch, setMeilisearchToken, setMeilisearchUrl, setS3Url } from "@/store/reducer/options"; import { useLocalStorage } from "@mantine/hooks"; import { IconBrandGithub, IconMail } from "@tabler/icons-react"; import { Meilisearch } from "meilisearch"; @@ -110,6 +110,22 @@ export default function SettingsPage() { /> ) + }, + { + title: "Enable Hybrid Search", + description: "Enable hybrid search for Meilisearch", + value: ( +
+ { + const v = value.currentTarget.checked; + store.dispatch(setEnableHybridSearch(v)); + }} + /> +
+ ) } ], [ diff --git a/src/store/reducer/options.ts b/src/store/reducer/options.ts index 95889fe..a488488 100644 --- a/src/store/reducer/options.ts +++ b/src/store/reducer/options.ts @@ -4,6 +4,7 @@ export interface OptionsState { meilisearchUrl: string; meilisearchToken: string; s3Url: string; + enableHybridSearch?: boolean; } const initialState: OptionsState = { @@ -11,6 +12,7 @@ const initialState: OptionsState = { meilisearchToken: "a568afad53a4dd124c508b9acd26ec35ff65665c07020913533cd7b176a28a04", s3Url: "https://minio-hdd.yoshino-s.xyz/", + enableHybridSearch: true, }; const optionsSlice = createSlice({ @@ -26,10 +28,16 @@ const optionsSlice = createSlice({ setS3Url: (state, action: PayloadAction) => { state.s3Url = action.payload ?? initialState.s3Url; }, + setEnableHybridSearch: ( + state, + action: PayloadAction + ) => { + state.enableHybridSearch = action.payload ?? initialState.enableHybridSearch; + } }, }); -export const { setS3Url, setMeilisearchUrl, setMeilisearchToken } = +export const { setS3Url, setMeilisearchUrl, setMeilisearchToken, setEnableHybridSearch } = optionsSlice.actions; export default optionsSlice.reducer;