Помощь в построении перевернутого индекса
Это часть процесса поиска информации, который я делаю для школы. План состоит в том, чтобы создать хэш-карту слов, используя первые две буквы слова в качестве ключа и любые слова с двумя буквами, сохраненные в виде строкового значения. Так,
hashmap ["ba"] = "плохая база ячменя"
По окончании токенизации строки я беру эту хэш-карту, сериализую ее и добавляю в текстовый файл с именем ключа.
Идея состоит в том, что, если я возьму свои данные и распределю их по сотням файлов, я уменьшу время, необходимое для выполнения поиска, уменьшив плотность каждого файла. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я делаю более 100 файлов за каждый прогон, случается, что по каким-то причинам создается несколько файлов, поэтому эти записи пусты. Есть ли способ сделать это более эффективным? Стоит ли продолжать это, или я должен отказаться от этого?
Я хотел бы отметить, что я использую PHP. Два языка, которые я знаю относительно близко, - это PHP и Java. Я выбрал PHP, потому что интерфейс будет очень простым, и я смогу без проблем добавлять такие функции, как автозаполнение / поиск по запросу. Я также не вижу никакой выгоды в использовании Java. Любая помощь приветствуется, спасибо.
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);
}
}
Вы не объяснили проблему, которую пытаетесь решить. Я предполагаю, что вы пытаетесь создать механизм полнотекстового поиска, но у вас нет идентификаторов документов в вашей хэш-карте, поэтому я не уверен, как вы используете хэш-карту для поиска подходящих документов.
Предполагая, что вам нужен механизм полнотекстового поиска, я хотел бы изучить использование структуры данных для структуры. Вы должны быть в состоянии вместить все в нем, не становясь слишком большим. Узлы, которые соответствуют слову, которое вы хотите проиндексировать, будут содержать идентификаторы документов, содержащих это слово.