协助建立倒指数

时间:2010-04-03 03:44:45

标签: php search search-engine information-retrieval inverted-index

这是我正在为学校做的信息检索工作的一部分。计划是使用单词的前两个字母作为键来创建单词的散列映射,并将具有两个字母的任何单词保存为字符串值。所以,

hashmap [“ba”] =“糟糕的大麦基地”

一旦我完成了对一行的标记,我就会使用该散列图,对其进行序列化,并将其附加到以该键命名的文本文件中。

我的想法是,如果我将数据传播到数百个文件中,我将通过减少每个文件的密度来减少完成搜索所需的时间。我遇到的问题是,当我在每次运行中制作100多个文件时,无论出于何种原因,它都会因创建一些文件而窒息,因此这些条目为空。 有什么方法可以提高效率吗?值得继续下去,还是应该抛弃它?

我想提一下我正在使用PHP。我比较熟悉的两种语言是PHP和Java。我之所以选择PHP是因为前端非常简单,我可以添加自动完成/建议搜索等功能而不会出现问题。我也认为使用Java没有任何好处。感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:2)

我会使用单个文件来获取并放置序列化字符串。我也会使用json作为序列化。

放置数据

$string = "bad barley base";
$data = explode(" ",$string);
$hashmap["ba"] = $data;

$jsonContent = json_encode($hashmap);
file_put_contents("a-z.txt",$jsonContent);

获取数据

$jsonContent = file_get_contents("a-z.txt");
$hashmap = json_decode($jsonContent);

foreach($hashmap as $firstTwoCharacters => $value) {
    if ($firstTwoCharacters == 'ba') {
        $wordCount = count($value);
    }
}

答案 1 :(得分:0)

您没有解释您要解决的问题。我猜你正在尝试创建一个全文搜索引擎,但是你的hashmap中没有文档id,所以我不确定你是如何使用hashmap来查找匹配文档的。

假设您需要全文搜索引擎,我会考虑使用trie作为数据结构。你应该能够适应它里面的所有东西而不会变得太大。与您要索引的单词匹配的节点将包含包含该单词的文档的ID。