You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中基于Redis OM实现模糊搜索?

Redis OM + Redis Search 实现模糊搜索解决方案

你的当前代码使用placedescription + "*"仅实现了前缀匹配,如果需要真正的模糊搜索(包含任意位置匹配、允许字符错误),可以参考以下几种实现方式:

1. 任意位置包含匹配

如果需要匹配字段中任意位置包含目标字符串的记录,可以在关键字前后都加上通配符*:

let searchResults = await repository.search()
    .where("country").equal(correctCountry)
    .where("city").equal(city.toLocaleLowerCase())
    .and("descriptionAndStreet")
    .matches(`*${placedescription}*`) // 前后加*实现包含匹配
    .return.page(0, 20)

注意:通配符开头的查询(*xxx)无法利用前缀索引,数据量较大时会有性能损耗,建议结合业务场景使用。

2. 容错模糊匹配(支持字符错误)

Redis Search支持基于Levenshtein距离的容错模糊搜索,允许指定最多N个字符的增/删/改错误,语法是在关键字后加~N:

let searchResults = await repository.search()
    .where("country").equal(correctCountry)
    .where("city").equal(city.toLocaleLowerCase())
    .and("descriptionAndStreet")
    .matches(`${placedescription}~1`) // 允许最多1个字符的差异
    .return.page(0, 20)
  • 可以调整~后的数字(如~2)来放宽容错范围,但数值越大查询性能越低。
  • 这种方式适合处理用户输入的拼写错误场景。

关键前提:确保字段索引类型正确

使用上述模糊搜索语法前,必须保证descriptionAndStreet字段在Redis OM的实体定义中配置为text类型,否则无法支持模糊搜索语法:

const { Entity, Schema } = require("redis-om");

class Place extends Entity {}
const placeSchema = Schema(Place, {
  country: { type: "string" },
  city: { type: "string" },
  descriptionAndStreet: { type: "text" }, // 必须为text类型
});

内容的提问来源于stack exchange,提问作者Morgan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:01:05