Nodis - 基于redis和Nodejs的前缀匹配、模糊搜索

Nodis - 基于redis和Nodejs的前缀匹配、模糊搜索

Nodis

  • github - Nodis
  • 基于redis和node.js, 支持前缀匹配和模糊匹配搜索, 如用户名搜索、文章标题搜索等.
  • 使用了zookeeper和thrift, 客户端可用任何支持thrift的语言实现, 也可很容易地移除这两部分代码.
  • 很容易即可更改为通用代码

使用

  • 启动redis
  • 启动服务端node NodisServer.js(会注册zookeeper服务)
  • 根据thrift/nodis.thrift提供的接口实现客户端
  • 客户端调用接口测试

其它

  • zookeeper的代码可以很容易的移除, 代码在/lib/zk.js
  • 核心库只有nodis.js, 不使用thrift只需要更改/NodisServer.js
  • 前缀匹配搜索(如User), 提供了app.js(express 3.0)用作参考实现
  • 关于node.js如何使用thrift和zookeeper,可参考这里

4 回复

Nodis - 基于Redis和Node.js的前缀匹配、模糊搜索

摘要

Nodis 是一个利用 Redis 和 Node.js 构建的前缀匹配和模糊搜索工具。它适用于多种场景,例如用户名搜索、文章标题搜索等。

GitHub

特点

  • 前缀匹配:支持基于前缀的搜索。
  • 模糊搜索:支持模糊搜索功能。
  • 跨语言支持:使用 Thrift 协议,客户端可以用任何支持 Thrift 的语言实现。
  • 灵活性:可以通过移除 Zookeeper 和 Thrift 部分来简化部署。

使用方法

  1. 启动 Redis: 确保你已经安装并运行了 Redis。你可以通过以下命令启动 Redis 服务器:

    redis-server
    
  2. 启动服务端: 运行 NodisServer.js 文件以启动服务端。这将同时注册到 Zookeeper 服务中(如果你需要使用 Zookeeper)。

    node NodisServer.js
    
  3. 实现客户端: 根据 thrift/nodis.thrift 文件提供的接口实现客户端。以下是一个简单的客户端示例,展示了如何进行前缀匹配搜索:

    const thrift = require('thrift');
    const nodis = require('./gen-nodejs/nodis_types');
    const transport = require('thrift/lib/thrift/transport');
    const protocol = require('thrift/lib/thrift/protocol');
    
    // 创建 Thrift 客户端
    const socket = new transport.TBufferedTransportClient({
      host: 'localhost',
      port: 9090,
    });
    
    const client = thrift.createClient(nodis.Nodis, socket);
    
    // 执行前缀匹配搜索
    const prefix = 'user';
    client.prefixSearch(prefix, (err, results) => {
      if (err) {
        console.error('Error:', err);
      } else {
        console.log('Results:', results);
      }
    });
    
  4. 测试客户端: 你可以编写一些测试代码来验证客户端的功能是否正常工作。

其他信息

  • Zookeeper 移除:如果你不需要使用 Zookeeper,可以轻松地移除相关代码。这些代码位于 /lib/zk.js 文件中。
  • 核心库:核心库主要集中在 nodis.js 文件中。如果不需要使用 Thrift,只需修改 NodisServer.js 文件即可。
  • 前缀匹配示例:提供了 app.js 文件作为参考实现,使用 Express 3.0 框架构建。
  • Node.js 和 Thrift/Zookeeper 教程:更多关于如何在 Node.js 中使用 Thrift 和 Zookeeper 的教程,可以参考 这里

通过上述步骤和代码示例,你可以快速上手并使用 Nodis 来实现高效的前缀匹配和模糊搜索功能。


写得还不错呀,竟然没有人评论,决定山寨前缀搜索部分成为java版- -

just do it.

Nodis - 基于Redis和Node.js的前缀匹配、模糊搜索

描述

Nodis 是一个基于 Redis 和 Node.js 的库,用于实现前缀匹配和模糊搜索功能。例如,它可以用于用户名称搜索或文章标题搜索。

GitHub 地址

特点

  • 依赖 Redis: 数据存储和检索通过 Redis 进行。
  • 支持多种搜索模式: 包括前缀匹配和模糊搜索。
  • 使用 Zookeeper 和 Thrift: 通过 Zookeeper 注册服务,并使用 Thrift 进行通信。这些组件可以根据需要轻松移除。

使用方法

  1. 启动 Redis: 确保 Redis 服务器正在运行。
  2. 启动服务端: 运行 node NodisServer.js 启动服务端,该脚本还会向 Zookeeper 注册服务。
  3. 实现客户端: 根据 thrift/nodis.thrift 提供的接口,实现客户端逻辑。
  4. 测试客户端: 调用客户端接口进行测试。

其他信息

  • Zookeeper 移除: zk.js 文件中的 Zookeeper 代码可以轻松移除。
  • 核心库: nodis.js 是核心库,如果不需要 Thrift 只需修改 NodisServer.js
  • 前缀匹配示例: 在 app.js(使用 Express 3.0)中提供了前缀匹配搜索的参考实现。
  • Node.js 中使用 Thrift 和 Zookeeper: 更多详细信息参见 这里

示例代码

以下是一个简单的前缀匹配搜索示例:

// app.js
const express = require('express');
const redis = require('redis');
const nodis = require('./nodis');

const client = redis.createClient();
const server = new nodis.Server(client);

server.init().then(() => {
    const app = express();

    app.get('/search', (req, res) => {
        const prefix = req.query.prefix;
        server.search(prefix, (err, results) => {
            if (err) {
                return res.status(500).send(err);
            }
            res.json(results);
        });
    });

    app.listen(3000, () => {
        console.log('App listening on port 3000!');
    });
});

解释

  1. Redis 客户端: 创建 Redis 客户端连接。
  2. Nodis 服务器: 初始化 Nodis 服务器实例。
  3. 路由处理: 实现 /search 路由处理程序,接收查询参数 prefix 并进行前缀匹配搜索。
  4. 结果返回: 返回搜索结果给客户端。

以上是 Nodis 的基本介绍及示例代码。希望对你有所帮助!

回到顶部