この作業は SQL データベースで行うことをお勧めします。ドキュメントをそこに保存したくないかもしれませんが、トピックは適切です。
トピック専用のテーブルが 1 つ必要です。
create table Topics (
TopicId int identity(1,1), -- SQL Server for auto increment column
TopicName varchar(255),
CreatedBy varchar(255) default system_user,
CreatedAt datetime default getdate()
)
ドキュメントを識別するためのある種のドキュメント ID があると仮定して、ドキュメントに割り当てられたトピック用に別のテーブルが必要です。
create table DocumentTopics (
DocumentTopicId int identity(1,1), -- SQL Server for auto increment column
TopicId int,
DocumentID int,
CreatedBy varchar(255) default system_user,
CreatedAt datetime default getdate()
)
ドキュメント ビューの別のテーブル:
create table DocumentView (
DocumentViewId int identity(1,1), -- SQL Server for auto increment column
DocumentId int,
ViewedAt datetime,
viewedBy int, -- some sort of user id
CreatedBy varchar(255) default system_user,
CreatedAt datetime default getdate()
)
次のようなクエリを使用して、特定の日付範囲の人気度別にトピックを取得できるようになりました。
select t.TopicId, t.TopicName, count(*) as cnt
from DocumentUsage du join
DocumentTopics dt
on du.DocumentId = dt.DocumentId join
Topics t
on dt.TopicsId = t.TopicsId
where du.ViewedAt between <date1> and <date2>
group by t.TopicId, t.TopicName
order by 3 desc
また、ユーザーに関する情報、時間の経過に伴う変化、およびその他の情報を取得することもできます。トピックの重みを提供できる users テーブルを作成できます (信頼性の高いユーザー、信頼性の低いユーザー)。システムのこの側面は、SQL で行う必要があります。