0

我正在为我的网站建立一个搜索引擎。我有我网站页面中包含的所有单词及其位置的索引。我正在使用 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

如果我想查找 jeff 的所有帖子列表,我将查找“jeff”作为键;如果它存在,那么我将它插入到一个变量中,比如$v=index['jeff'].

这很简单,但是现在如果我有一个像“jeff and seka”这样的多字符串查询呢?我如何检查它们是否都存在并将它们作为不同的数组返回(一个用于 jeff,另一个用于 seka),以便我可以轻松地将它们相交以找到具有两个搜索字符串的文档?

4

1 回答 1

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);并将其用作每个其他术语的数组的索引。

于 2013-05-28T11:00:14.120 回答