Представьте, что у меня есть огромная база данных тем и сообщений (около 10.000.000 записей) с разных сайтов форума, включая несколько подфорумов, которые служат в качестве моих документов lucene.
Теперь я пытаюсь вычислить функцию под названием "OnTopicness "для каждого поста на основе используемых в нем терминов.Фактически, эта особенность представляет собой не что иное, как простое косинусное сходство между двумя векторами документов, которые будут храниться в базе данных и, следовательно, должны рассчитываться только один раз на пост.:
- Forum-OnTopicness : косинусное сходство между моим сообщением и виртуальным документом, состоящим из всех других сообщений на указанном форуме (включая все темы на форуме)
- Thread-OnTopicness : косинусное сходство между моим сообщением и виртуальным документом, состоящим из всех других сообщений в указанной теме
Поскольку API Lucene.NET не предлагаетметод для вычисления косинуса сходства документа-документа или индекса-документа, Я прочитал , что я мог либо проанализировать один из документов как запрос и найти другой документ в результатах, либо чтобы я мог вручную вычислить сходствоиспользуя TermFreqVectors и DocFrequencies.
Я попробовал вторую попытку, потому что она звучит быстрее, но столкнулась с проблемой: метод IndexReader.GetTermFreqVector () принимает внутренний docNumber в качестве параметра, который я не знаю, просто ли я передаю два документа в свой метод GetCosineS Similarity:
public void GetCosineSimilarity(Document doc1, Document doc2)
{
using (IndexReader reader = IndexReader.Open(FSDirectory.Open(indexDir), true))
{
// how do I get the docNumbers?
TermFreqVector tfv1 = reader.GetTermFreqVector(???, "PostBody");
TermFreqVector tfv2 = reader.GetTermFreqVector(???, "PostBody");
...
// assuming that I have the TermFreqVectors, how would I continue here?
}
}
Кроме того, как бы вы создали упомянутый «виртуальный документ» для всего форума или темы?Должен ли я просто объединить поля PostBody всех содержащихся постов и проанализировать их в новом документе, или я могу просто создать для них индексный указатель и каким-то образом сравнить свой пост со всем этим индексом?
Как видите, какЯ новичок в Lucene, я все еще не уверен в своем общем дизайне индексов и определенно мог бы воспользоваться некоторыми общими советами.Помощь высоко ценится - спасибо!