拼音搜索怎么匹配中文关键词?
我做了一个商品搜索功能,用户输入拼音比如 “shouji”,希望能匹配到 “手机” 这类中文词,但不知道怎么实现。
试过用 pinyin 库把商品名转成拼音再比对,但性能太差,列表一长就卡。有没有更高效的办法?
现在搜索逻辑是这样的:
const items = [
{ name: '手机', pinyin: 'shouji' },
{ name: '电脑', pinyin: 'diannao' }
];
// 搜索时直接 indexOf 匹配
const results = items.filter(item =>
item.pinyin.includes(input)
);
但每次输入都要遍历整个列表,体验不好。能不能在不预生成全量拼音的前提下实现?
具体来说,你可以使用一个库来处理拼音分词和构建索引,比如
pinyin-pro或者hanlp-js。但如果你不想引入额外的库,也可以自己简单实现一个基础版本。首先,把每个商品的拼音分割成多个部分(可以根据实际情况调整分割粒度),然后构建一个映射表,存储每个拼音片段对应的商品索引。这样在搜索时,只需要查找映射表就能快速获取可能匹配的商品列表,然后再进行精确匹配。
下面是一个简单的示例:
这个例子中,我们假设拼音按3个字符分割来构建索引。实际应用中,你可以根据具体情况调整分割策略,或者使用更复杂的分词算法。希望这个思路对你有帮助,优化后的搜索应该能快很多。