Как сортировать по тегам с учетом веса тегов, связанных с каждым документом? - PullRequest
0 голосов
/ 17 декабря 2011

Я создаю поисковую систему Solr для поиска по коллекции из 300 тыс. Документов. Среди многих проиндексированных полей важным является теги. Моя идея состоит в том, чтобы назначить каждому документу вектор тегов, каждый с заданным весом (в основном в зависимости от количества пользователей, которые выбрали этот тег для этого документа). Например

Doc1 = {tag1: 0.3, tag2: 0.7, tag3: 0.8, tag4: 1}

Doc2 = {tag2: 0.5, tag3: 0.8, tag4: 0.8, tag5 = 0.9}

Используя этот пример, когда кто-то запрашивает документы, помеченные тегом tag4, я бы, конечно, вернул оба документа, но Doc1 с наивысшим баллом, поскольку тег4 был взвешен выше.

В идеале, способ реализовать это в Solr, это что-то вроде создания многозначного поля, называемого «тегами», и назначать во время индексации вес каждому тегу, содержащемуся в таком поле. Итак, первый вопрос:

Можно ли назначить частоту термина (как вес тега) вручную во время индексации?

К тому, что я нашел ... кажется, нет! Хорошо ... Обходной путь - скопировать, например, tag4 10 раз в поле тегов Doc1 и только 8 в поле тегов Doc2. Конечно, есть некоторые недостатки и ограничения.

Однако здесь возникает большая проблема, которую я не могу решить даже с помощью обходного пути. Я хотел бы определить свой собственный счет. В моем конкретном случае лучше всего подходит что-то вроде sort = tf (tags, tag4). На самом деле TF в этом случае гораздо важнее, чем IDF! К сожалению, эта функция (функции релевантности) будет выпущена только в Solr 4: http://wiki.apache.org/solr/FunctionQuery#tf

Есть ли у вас какие-либо идеи о том, как изменить функцию подсчета в Solr 3.5, придавая больше значения TF и ​​меньше IDF?

Есть ли какой-нибудь хак, чтобы сделать это просто, или вы бы изменили исходный код Lucene (если да ... что и где?), Или вы бы использовали ночной сборке Solr4?

Заранее спасибо за советы!

...