У меня есть таблица слов, таблица поиска, где эти слова найдены в документах, и количество раз, когда это слово появляется в этом документе. Таким образом, может быть запись, в которой говорится, что Alpha существует 5 раз в документе X, в то время как Beta существует 3 раза в документе X, а другой для бета-версии, существующей дважды в документе Y.Слияние запросов одной таблицы N раз
Пользователь может ввести несколько слов для поиска, так что «быстрая коричневая лиса» - это три вопроса, но «быстрый коричневый лис прыгнул» - это четыре вопроса. В то время как я могу получить результат набора результатов каждого слова по очереди, то, что я на самом деле хочу, состоит в том, чтобы добавить количество совпадений для каждого слова, так что верхний результат является наивысшим количеством встречаемости для всех слов.
Документ может иметь сотни «быстрых» и «коричневых» вхождений, но никаких «лис» не происходит. Результаты должны по-прежнему включаться, так как они могут набирать больше, чем документ, только с одним из «быстрых», «коричневых» и «лис».
Проблема, с которой я не могу разобраться, заключается в том, как объединить 1 к N запросам с суммами, суммированными. I думаю Мне нужно использовать GROUP BY и SUM(), но не обязательно. Linq предпочтет, но SQL будет в порядке. MS SQL 2016.
Я хочу передать результаты на индексный указатель, поэтому для каждого из результатов не будет работать, плюс мы говорим о 80 000 записей слов, 3 миллионах записей в документах и 100 000 документы.
// TextIndexDocument:
// Id | WordId | Occurences | DocumentId | (more)
//
// TextIndexWord:
// Id | Word
foreach (string word in words)
{
string lword = word.ToLowerInvariant();
var results = from docTable in db.TextIndexDocuments
join wordTable in db.TextIndexWords on docTable.WordId equals wordTable.Id
where wordTable.Word == lword
orderby docTable.Occurences descending
select docTable;
// (incomplete)
}
Более подробная информация
Я понимаю, что полный текст поиска рекомендуется. Проблема заключается в том, как ранжировать результаты из полудюжины несвязанных таблиц (поиск в сообщениях, статьях, продуктах ...) в один унифицированный набор результатов - скажем, идентификатор записи, тип записи (статья/продукт/форум) и Гол. Главным результатом может стать сообщение на форуме, в то время как следующие лучшие хиты - это несколько статей, затем продукт, другой форум и т. Д. Таблица TextIndexDocument уже имеет эту информацию во всех соответствующих таблицах.
Вы описываете полнотекстовый индекс. –