заметочка на полях, очень и очень сыро...
p2p.
определяем 1-мерную per-host метрику f(address).
определяем 1-мерную per-keyword метрику f(keyword).
хост, ответственный за определенный keyword - это тот, который min[all hosts] (abs(f(address)-f(keyword))), и парочка предыдущих к нему. они - составляют корни дерева, аккумулируют все что знают про это ключевое слово по всей p2p.
транзитные хосты - кэширующие.
структура - двухуровневая для начала, потом можно и больше - соответственно, каждый уровень (кроме последнего "stub") - колечко.
кто-то что-то понял ? вот-вот. я предупреждал в самом начале.
что сделать с синонимами ? (и надо ли)
что если несколько слов ?