首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在strapi cms中实现模糊搜索

如何在strapi cms中实现模糊搜索
EN

Stack Overflow用户
提问于 2021-08-09 14:52:37
回答 2查看 2.1K关注 0票数 0

对于如何在strapi (使用mysql)中实现模糊搜索,有什么想法吗?

例如:当我搜索“电视广告”时,我想得到一个名为“tv syd”的条目

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-20 09:37:25

您可以在Strapi中创建一个自定义控制器,并包括像fuse.js这样的模糊搜索库。

如果需要帮助创建自定义控制器或将其连接到端点请参阅文档中的此页面

这是一个简单的控制器,用于对一个名为“电影”的表进行模糊搜索,并使用搜索项搜索标题和概要字段。

代码语言:javascript
运行
复制
'use strict';
const Fuse = require('fuse.js');

module.exports = {
  async fuzzySearch(ctx) {
    
    const searchTerm = ctx.query._search;
    
    const allFilms = await strapi.services.films.find();
    
    const fuse = new Fuse(allFilms, {
      keys:["title", "synopsis"]
    });
    
    const searchedFilms = fuse.search(searchTerm);
    
    return searchedFilms;
  }
}

对于大型数据库表,您需要编写一个自定义mysql查询。但是我发现,如果条目少于几千条,这个解决方案非常有用,因为fuze为您提供了大量的选项,可以不同地查询多个字段和加权字段(即使电影标题比概要更重要)。

票数 2
EN

Stack Overflow用户

发布于 2021-08-10 13:59:36

我猜你的意思是MySQL的“全文搜索”。所以,我会试一试。

如果这样做或类似的事情,可能会有两种方法。

您可以利用Strapi过滤器的功能,contains, ncontains, containss and ncontainss将做一件与全文搜索类似的事情。是的,这并不是完全的测试搜索,但它可以满足大多数情况。

即:

参考文献:https://strapi.io/documentation/developer-docs/latest/developer-resources/content-api/content-api.html#filters

我还没有对这个做过深入的测试,但可能会成功的。您可以创建一个控制器端点,并且在控制器内部使用Knex构建一个复杂的查询并请求一个全文响应。

即:

代码语言:javascript
运行
复制
const result = await knex('users')
            .orWhereRaw('MATCH(firstname_preferred,lastname_preferred,username) AGAINST(? IN BOOLEAN MODE)', params.search)
            .limit(lim)

参考文献:https://strapi.io/documentation/developer-docs/latest/development/backend-customization.html#knex https://gist.github.com/cameronblandford/808ca0f66acffb8b50b4e3704d6063a1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68714157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档