如何在strapi cms中实现模糊搜索
How to implement Fuzzy search in strapi cms
关于如何在 strapi 中实现模糊搜索的任何想法(mysql)?
示例:当我搜索 'tvs ad' 时,我想获取名称为 'tv syd'
的条目
我猜您指的是 MySQL 的“全文搜索”。
所以,我试试看。
如果这样做或类似的事情,可能有两种方法。
您可以利用 Strapi 过滤器的强大功能 contains, ncontains, containss and ncontainss
将执行与全文搜索类似的操作。是的,这不完全是完整的测试搜索,但它适用于大多数情况。
即:
我还没有真正深入地测试过这个,但它可能会起作用。
您可以制作控制器端点,并在控制器内部使用 Knex 构建复杂查询并请求全文响应。
即:
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
您可以在 Strapi 中创建一个自定义控制器并包含一个模糊搜索库,例如 fuse.js
如果您在创建自定义控制器或将其连接到端点方面需要帮助see this page in the docs
这是一个简单的控制器,用于对 table 电影进行模糊搜索
并使用搜索词搜索标题和概要字段
'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;
}
}
对于大型数据库 table,您需要编写 custom mysql query。但是我发现如果你的条目少于几千个,这个解决方案就很好用,因为 fuze 为你提供了很多选项来查询多个字段和不同的加权字段(即让电影标题比概要更重要).
关于如何在 strapi 中实现模糊搜索的任何想法(mysql)?
示例:当我搜索 'tvs ad' 时,我想获取名称为 'tv syd'
的条目我猜您指的是 MySQL 的“全文搜索”。 所以,我试试看。
如果这样做或类似的事情,可能有两种方法。
您可以利用 Strapi 过滤器的强大功能 contains, ncontains, containss and ncontainss
将执行与全文搜索类似的操作。是的,这不完全是完整的测试搜索,但它适用于大多数情况。
即:
我还没有真正深入地测试过这个,但它可能会起作用。 您可以制作控制器端点,并在控制器内部使用 Knex 构建复杂查询并请求全文响应。
即:
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
您可以在 Strapi 中创建一个自定义控制器并包含一个模糊搜索库,例如 fuse.js
如果您在创建自定义控制器或将其连接到端点方面需要帮助see this page in the docs
这是一个简单的控制器,用于对 table 电影进行模糊搜索 并使用搜索词搜索标题和概要字段
'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;
}
}
对于大型数据库 table,您需要编写 custom mysql query。但是我发现如果你的条目少于几千个,这个解决方案就很好用,因为 fuze 为你提供了很多选项来查询多个字段和不同的加权字段(即让电影标题比概要更重要).