我正在为我的网站构建搜索引擎。我有一个索引,包含我网站页面中包含的所有单词及其位置。我正在使用php数组,搜索后返回的信息如下:
'jeff' =>
array
1 =>
array
0 => int 0
1 => int 259
2 => int 444
3 => int 461
4 => int 486
'seka'
array
1 =>
array
0 => int 1
1 => int 260
2 => int 445
3 => int 462
4 => int 487
如果我想找到杰夫的所有贴子列表,我会寻找“杰夫”作为关键;如果它存在,那么我将其插入变量,如$v=index['jeff']
。
这很简单,但现在如果我有一个像“jeff and seka”这样的多字符串查询呢?我如何检查它们是否存在并将它们作为不同的数组返回(一个用于jeff,另一个用于seka)所以我可以轻松地将它们相交以查找带有两个搜索字符串的文档?
答案 0 :(得分:1)
编辑:在评论后重写。一些反馈会很好,看看我们是否正朝着正确的方向前进!
你看过array_intersect_key()功能了吗?你应该能够做到:
$common = array_intersect_key(index['jeff'], index['seka']);
这将为您提供一个新数组,其中只包含Jeff和Seka常用的那些页面的键(以及来自'jeff'的值)。您可以为该函数提供任意数量的附加数组,这将允许您一起搜索(例如)五个不同的术语,并仅检索包含全部五个的页面。
您的返回数组将包含每个页面的键。每个键的值将来自array_intersect_key()
调用中的第一个参数(在我的示例中为“jeff”)。换句话说,返回index['jeff']
数组的子集。
如果您想要检索每个页面上其他术语的位置,您可以在开始时使用不同的术语重复搜索(不要:非常低效)或循环返回结果中的键(您可以获得带有$pages = array_keys($common);
)的键数组,并将其用作每个其他术语的数组的索引。