作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我希望使用布隆过滤器或位掩码对搜索结果进行预过滤。举个具体的例子:
id,product,description
1,"coke", "A popular soft drink since 1900"
2,"pepsi", "A popular soda, similar to coke"
3,"soda", "A word to describe various soft drinks"
如果用户搜索单词“coke”,我们将在 product="coke"
上匹配第 1 行和 description(has word)="coke"
。
我们有内存限制,所以不能索引太多项目,但我正在考虑根据每行包含的第一个字母实现位掩码。这样,我们可以看到 c
包含在第 1 行和第 2 行中,但不包含在第 3 行中,因此我们根本不会将其包含在我们的搜索中。
如果我们取前三行,“word-starts-with”掩码看起来像(字母表的前 3 个字母)--
a b c d
1 0 1 1 (row 1 -- coke) -- has c? Y
1 0 1 0 (row 2 -- pepsi) -- has c? Y
1 0 0 1 (row 3 -- soda) -- has c? NO -- SKIP
那么我的问题有两个方面:
a=1
) -仅限字符?有关搜索要求的更多详细信息:
description like "%drink%"
(完全内部搜索)或description REGEXP '^|\sdrink'
(“edge search”,search在任何单词的开头)。最佳答案
如果您不能容忍误报,则一定不要使用布隆过滤器,因为它是一种概率数据结构。
对于位掩码方法,显然,时间效率不高,而且该方法以后很难扩展。当您谈论大约 800 MB 的数据大小时,您正在进入 Search or Information Retrieval 的范例。 .现在的问题不再局限于“位掩码与布隆过滤器”,只需阅读 Search Engine Indexing 中与索引相关的概念即可。 ,他们可能会帮助你。
要解决常用词,请阅读 stop words是以及如何删除它们。要更进一步,如果您不需要找到确切的词,请阅读 Stemming和 Lemmatization .
这个问题很宽泛,所以我只是给出了一些阅读建议。希望您觉得它们有用。
关于algorithm - 位掩码与布隆过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57667704/
我是一名优秀的程序员,十分优秀!