blog.cover

Nuxt4集成Algolia搜索服务

整它这个搜索组件比做索引麻烦多了

浏览414
评论0
2025年12月10日

托管站内全文搜索

现在市面上有一堆搜索引擎,比如 Algolia Meilisearch ZincSearch Elasticsearch.....

ELK学习难度曲线太过分了,直接排除Elasticsearch。而ZincSearch,虽然比Elasticsearch轻量,但是还是要自己写很多东西,我整个博客新功能总不能整半个月吧,故跳过。

所以这块的选择只有两个Aloglia Meilisearch。

Algolia VS Meilisearch

之前在很多Vitepress写的文档上都可以见到Aloglia的搜索功能。Aloglia那个输入即出结果、支持错别字容错、还能高亮关键词的智能搜索框嫩牛逼呢,这么多人用一定有它牛逼的道理。那时候我还发现了 Meilisearch,它不仅支持自部署,也提供了官方托管服务 Meilisearch Cloud,看起来像是 Algolia 的开源平替。

但深入体验了一下午,发现了几个不能接受的点:

  • Meilisearch Cloud 的免费试用期只有 14 天。

  • 自部署的是功能缩水的青春版。

  • 索引生成不如Aloglia好使

相比之下,Algolia开发成本嫩低,你只需要做这几件事:

  • 到Algolia官网,验证网站所有权。

  • 给爬虫写好指定的结构 或者是后端API集成生成索引

  • 配置索引字段(高亮,模糊搜索,需要返回的字段)

  • 填个API Key,塞个instantsearch组件进去。(react/vue都有 但是写它样式有点折磨)

如果你用的是Hexo / VitePress,那么最适合Algolia,它有 DocSearch 爬虫自动抓取 + 官方主题插件,可以零配置实现接入搜索功能,填两个参数,搜索框直接生成,连样式都帮你整好了。

接入Algolia索引

这里只讲一些细节,具体怎么添加和设置去搜下其他的看吧(

记住API和应用ID
记住右边index下面的一长串名字 后面index-name要用

爬虫设置

Javascript
       // 一个基础爬虫 支持DOM选择
recordExtractor: ({ url, $, helpers }) => {
        const $content = $("#content");
        if ($article.length === 0) return [];
        const title = $article.find("h1").text().trim() || $("title").text();
        const content = $content.text();
        return [
          {
            title,
            content,
            url: url.pathname,
            lang: "zh-CN",
          },
        ];
    

索引设置

需要配置:

  • Searchable attributes 可被搜索的字段

  • Facets→Attributes for faceting

  • Highlighting 可高亮的字段

  • Snippeting 截取搜索结果

在这里
Text
      ### 接入前端其他方法

用vue-instantsearch,封装好了的,填好参数就能用。但是具体样式和呈现的搜索组件需要自己改

```shell
npm install instantsearch.css vue-instantsearch
    
Javascript
      <template>
<AisInstantSearch
    :future="{ preserveSharedStateOnUnmount: true }"
    :search-client="searchClient"
    index-name="你在Algolia上创建的index名"
>
  <!-- 搜索输入框 -->
  <AisSearchBox class="w-full"/>
  <!-- 获取搜索状态 -->
  <AisStateResults v-slot="{ results }">
    <AisHits>
        <template #item="{ item }">
            { item }
        </template>
    </AisHits>
  </AisStateResults>
</AisInstantSearch>

</template>

<script setup lang="ts">
import { ref } from 'vue';
import { liteClient } from 'algoliasearch/lite';
import {
    AisInstantSearch,
    AisSearchBox,
    AisHits,
    AisStateResults 
} from 'vue-instantsearch/vue3/es';
// instantsearch.css里面有一堆官方样式 复制出来自己改改也可以
const searchClient = liteClient(
    '应用ID 填这',
    'API Key填这'
)
</script>

    
Nuxt4集成Algolia搜索服务
作者 NoelOrin
发布时间2025年12月10日
许可协议 CC BY-NC-SA 4.0