gpt4 book ai didi

search - 使用 mapreduce 在 NoSQL 中进行文本搜索

转载 作者:行者123 更新时间:2023-12-03 21:26:35 25 4
gpt4 key购买 nike

我正在开发一个需要搜索大量标题列表的应用程序。理想情况下我想使用 NoSQL,但似乎整个数据库的文本搜索不如 SQL 数据库(如果我错了请纠正我)

无论如何,我确实想优化搜索速度。普通搜索可能足够快,但我确实想要响应式实时搜索和模糊搜索。所以我只能想到两种方法:

  1. 将整个标题列表加载到内存中并作为 trie 或前缀树进行索引

  2. 使用 mapreduce 函数实现某种类型的 trie 算法。这将是首选解决方案,但我不确定是否可以这样做,否则磁盘空间成本可能会超过 yield 。

有什么想法吗?此外,我不确定“模糊搜索”是否最好用 trie 树或 B+ 树实现。

由于“标题”是唯一的。我应该只使用完整的标题作为 ID 吗?

最佳答案

要有效地执行此操作,您必须按单词为文本编制索引。

换句话说,名为 MapReduce:大型集群上的简化数据处理 的对象 foo 将映射到以下键:

  • MapReduce:大型集群上的简化数据处理
  • 大型集群上的简化数据处理,
  • 大型集群上的数据处理,
  • 大型集群处理,
  • 在大型集群上
  • 大型集群,
  • 集群

如果文本太长,您可以将键截断为给定的字符数(比如 24)。

这是 CouchDB 的代码示例:

function map(o) {
const SIZE = 24;
function format(text, begin) {
return text.substr(begin, SIZE).toLowerCase();
}
const WORD_MATCHER = /\S+/g;
while ((match = WORD_MATCHER.exec(o.title))) {
var begin = match.index;
emit(format(o.title, begin), {position: begin});
}
}

然后如果你要求data processdata processZ之间的键,你会得到:

{"key": "data processing on large clusters", "id": "foo", "value":{"position": 22}}

关于search - 使用 mapreduce 在 NoSQL 中进行文本搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15335266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com