【问题标题】:querying on inverted file index查询倒排文件索引
【发布时间】:2016-09-22 09:46:21
【问题描述】:

我在学校有一个项目,我需要使用倒排索引创建一个搜索引擎,但我有点不知道如何继续。

我使用倒排文件索引存储了我的文档(4 个文档)中的所有单词,但在某种程度上,特定文件中的每个单词都有一行,所以假设单词“like”可以出现在文档 2 三中times 和 doc 4 两次 - 所以它将有 2 行, word:like docid:2 hit:3 instoplist:0 和 word:like docid:4 hit:2 instopelist:0 (hit 是单词出现在doc 和 instoplist,如果它是停止列表中单词的一部分)。

现在我需要能够对该索引进行查询。 假设我需要找到 - 汽车和(摩托车或自行车) 这是最好的方法吗?我如何写搜索的顺序?我怎么知道先骑摩托车和自行车,然后在它们之间做“或”,然后用汽车做“和”?

*ps- 使用php编写代码

我将不胜感激,

谢谢

【问题讨论】:

    标签: search-engine querying inverted-index


    【解决方案1】:

    您可以使用包含汽车的文档的交集与(包含摩托车或自行车的文档的联合)

    汽车:doc1、doc2、doc3

    摩托车:doc1、doc4

    自行车:doc1,doc2

    所以你的最终文档列表应该是 doc1, doc2

    用于在 php 中查找交集和并集。 假设您有 3 个数组 $car 、 $motorcycle 和 $bicycle 包含包含这些词的文档

    <?php
    
      $car = ['doc1','doc2','doc3'];
    
      $motorcycle = ['doc1','doc4'];
    
      $bicycle = ['doc1','doc2'];
    
      $intersect = array_merge($motorcycle, $bicycle);
      $result = array_intersect($car , $intersect);
    
    
      for($x = 0; $x < count($result); $x++) {
          echo $result[$x];
          echo "<br>";
      }
    
    ?>
    

    【讨论】:

    • 我的问题更多的是我现在该怎么做,我需要先采取哪个语句以及它们之间的操作是什么
    • 首先你要找到摩托车和自行车的联合体。然后,您需要找到交叉点。
    • 这里是的......但在不同的陈述中不一定......所以我的问题是我怎么知道?
    • 正如您的问题所说的汽车和(摩托车或自行车) - 所以首先解决所有括号,然后解决其余部分。如果括号未事先定义,您可能需要定义优先级,例如 的优先级高于 或反之亦然,具体取决于您的用例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多