Перейти к содержимому

Поиск по сайту

По умолчанию сайты Starlight включают полнотекстовый поиск на основе Pagefind, который является быстрым и не требующим большой пропускной способности инструментом поиска для статических сайтов.

Для включения поиска не требуется никакой настройки. Создайте и разверните свой сайт, а затем используйте строку поиска в шапке сайта для поиска контента.

Скрытие содержимого из результатов поиска

Исключение страницы

Чтобы исключить страницу из поискового индекса, добавьте pagefind: false в метаданных страницы:

src/content/docs/not-indexed.md
---
title: Содержимое, которое нужно скрыть от поиска
pagefind: false
---

Исключение части страницы

Pagefind будет игнорировать содержимое внутри элемента с атрибутом data-pagefind-ignore.

В следующем примере первый абзац будет отображаться в результатах поиска, а содержимое <div> — нет:

src/content/docs/partially-indexed.md
---
title: Частично проиндексированная страница
---
Этот текст можно будет найти с помощью поиска.
<div data-pagefind-ignore>
Этот текст будет скрыт от поиска.
</div>

Альтернативные поставщики услуг поиска

Algolia DocSearch

Если у вас есть доступ к программе DocSearch от Algolia и вы хотите использовать её вместо Pagefind, вы можете воспользоваться официальным плагином Starlight DocSearch.

  1. Установите @astrojs/starlight-docsearch:

    Окно терминала
    npm install @astrojs/starlight-docsearch
  2. Добавьте DocSearch в конфигурацию Starlight plugins в astro.config.mjs и передайте ему ваши Algolia appId, apiKey и indexName:

    astro.config.mjs
    import { defineConfig } from 'astro/config';
    import starlight from '@astrojs/starlight';
    import starlightDocSearch from '@astrojs/starlight-docsearch';
    export default defineConfig({
    integrations: [
    starlight({
    title: 'Сайт с DocSearch',
    plugins: [
    starlightDocSearch({
    appId: 'YOUR_APP_ID',
    apiKey: 'YOUR_SEARCH_API_KEY',
    indexName: 'YOUR_INDEX_NAME',
    }),
    ],
    }),
    ],
    });

С этой обновлённой конфигурацией строка поиска на вашем сайте теперь будет открывать модальное окно Algolia вместо стандартного модального окна поиска.

Конфигурация DocSearch

Плагин Starlight DocSearch также поддерживает настройку компонента DocSearch с помощью следующих дополнительных опций:

  • maxResultsPerGroup: Ограничивает количество результатов, отображаемых для каждой группы поиска. По умолчанию 5.
  • disableUserPersonalization: Предотвращает сохранение недавних поисков и избранных элементов пользователя в локальном хранилище. По умолчанию false.
  • insights: Включает плагин Algolia Insights и отправляет события поиска в ваш индекс DocSearch. По умолчанию false.
  • searchParameters: Объект, настраивающий параметры поиска Algolia.

Перевод пользовательского интерфейса DocSearch

По умолчанию DocSearch предоставляет только английские строки пользовательского интерфейса. Добавьте перевод модального пользовательского интерфейса для вашего языка, используя встроенную систему интернационализации Starlight.

  1. Расширьте определение коллекции контента Starlight i18n схемой DocSearch в файле src/content/config.ts:

    src/content/config.ts
    import { defineCollection } from 'astro:content';
    import { docsSchema, i18nSchema } from '@astrojs/starlight/schema';
    import { docSearchI18nSchema } from '@astrojs/starlight-docsearch/schema';
    export const collections = {
    docs: defineCollection({ schema: docsSchema() }),
    i18n: defineCollection({
    type: 'data',
    schema: i18nSchema({ extend: docSearchI18nSchema() }),
    }),
    };
  2. Добавьте переводы в JSON-файлы в src/content/i18n/.

    Это английские значения по умолчанию, используемые DocSearch:

    src/content/i18n/en.json
    {
    "docsearch.searchBox.resetButtonTitle": "Clear the query",
    "docsearch.searchBox.resetButtonAriaLabel": "Clear the query",
    "docsearch.searchBox.cancelButtonText": "Cancel",
    "docsearch.searchBox.cancelButtonAriaLabel": "Cancel",
    "docsearch.searchBox.searchInputLabel": "Search",
    "docsearch.startScreen.recentSearchesTitle": "Recent",
    "docsearch.startScreen.noRecentSearchesText": "No recent searches",
    "docsearch.startScreen.saveRecentSearchButtonTitle": "Save this search",
    "docsearch.startScreen.removeRecentSearchButtonTitle": "Remove this search from history",
    "docsearch.startScreen.favoriteSearchesTitle": "Favorite",
    "docsearch.startScreen.removeFavoriteSearchButtonTitle": "Remove this search from favorites",
    "docsearch.errorScreen.titleText": "Unable to fetch results",
    "docsearch.errorScreen.helpText": "You might want to check your network connection.",
    "docsearch.footer.selectText": "to select",
    "docsearch.footer.selectKeyAriaLabel": "Enter key",
    "docsearch.footer.navigateText": "to navigate",
    "docsearch.footer.navigateUpKeyAriaLabel": "Arrow up",
    "docsearch.footer.navigateDownKeyAriaLabel": "Arrow down",
    "docsearch.footer.closeText": "to close",
    "docsearch.footer.closeKeyAriaLabel": "Escape key",
    "docsearch.footer.searchByText": "Search by",
    "docsearch.noResultsScreen.noResultsText": "No results for",
    "docsearch.noResultsScreen.suggestedQueryText": "Try searching for",
    "docsearch.noResultsScreen.reportMissingResultsText": "Believe this query should return results?",
    "docsearch.noResultsScreen.reportMissingResultsLinkText": "Let us know."
    }