2014-02-11 2 views
3

У меня проблема с алгоритмом подсчета по умолчанию Solr, который является специфическим для домена моей коллекции. В моем домене документы, содержащие все термины запроса или большинство терминов запроса, существенно более важны, чем документы, содержащие только несколько терминов. Я хотел бы увеличить количество документов, чтобы, чем больше соответствий, тем выше оценка. Я знаю, что solr уже повышает такие документы, умножая оценку на коэффициент координации. Однако координирующий фактор для меня незначителен, и я хочу поднять его до определенной степени. Я также знаком с функцией Minimum-Should-Match ExtendedDismax для парсера, но эта функция не решает мою проблему, потому что я не хочу исключать документы, которые не соответствуют достаточным условиям, я просто хочу «наказать», их.Усиление коэффициента координации в запросе Solr

Есть ли способ увеличить значение коэффициента координации? Я также принимаю другие решения, которые не используют фактор координации, если они решают проблему.

ответ

1

Проще всего просто написать собственное сходство. Вы можете переопределить coord method с, что вам нравится, и реализация этого довольно просто на самом деле что-то вроде:

public class MySimilarity extends DefaultSimilarity { 
    @Override 
    public float coord(int overlap, int maxOverlap) { 
     return super.coord(overlap, maxOverlap)^2; 
    } 
} 

Вы можете принести в вашей собственной реализации подобия in the schema:

<similarity class="this.is.MySimilarity"/> 
+0

Спасибо, я принимаю ваш ответ, потому что он решает проблему, как я уже сказал. Проблема с решением заключается в том, что мощность, на которую возникает координационный фактор, не может быть задана в качестве параметра для запроса. Я не был четко осведомлен об этом при описании проблемы, но мне придется каждый раз повышать коэффициент координации. Можно ли реализовать его таким образом, чтобы это можно было сделать? Я думал о запросе функции повышения, но я не вижу, как обращаться к этому параметру. – snakile

+0

Не знаю ничего подобного, боюсь. Единственные решения, которые приходят на ум, - это: ** A ** - Дублировать поле и использовать «SchemaSimilarityFactory», чтобы применить настраиваемое сходство к одному, а по умолчанию - другое, и запросить правильное поле, ** B * * -Access 'IndexSearcher', где вы можете получить доступ к сходству перед запуском вашего запроса (что-то вроде' indexSearcher.getSimilarity(). SetCoordBoostFactor (2); indexSearcher.search (query); '), ** C ** - Post которая, вероятно, возможна только в том случае, если вы можете рассчитывать на относительно короткие документы, а запросы относительно просты. – femtoRgon

Смежные вопросы