Ответы пользователя по тегу Solr
  • Как настроить параметры поиска в Apache Solr?

    Espritto
    @Espritto Автор вопроса
    Понимаю, что вопрос очень специфический и даже на стэковерфлоу никто не откликнулся, хотел уже дергать непосредственно разработчиков Solr-а но все же разобрался сам по этому отвечаю сам себе...

    1) Надо модифицировать scorer - алгоритм оценки и ранжирования найденных совпадений. В этом алгоритме нас интересует параметр Term Frequency (сокр. TF, обычно он используется вместе со своим братом IDF — inverse document frequency, но в данном случае его трогать не надо). TF подсчитывает количество слов в документе и чем оно больше, тем выше оценка. Нам нужно игнорировать этот параметр, по этому надо найти место в коде движка и прописать, чтобы всегда возвращалось 1. Solr использует класс Similarity для оценки результатов, точнее множество расширений этого класса, реализующие разные алгоритмы. В конфигах ядра базы прописал, чтобы использовался класс ClassicSimilarityFactory а в реализации класса ClassicSimilarity захардкодил, чтобы функция tf() всегда возвращала 1.0f. Поскольку Solr это опенсорский проект написанный да Java то изменение исходников не составляет особого труда. Дальше по инструкции из README билдим проект, запускам - все работает! Убедиться, что расчеты весов правильные можно через дебаг режим в запросе (тогда вместе с результатом будет возвращена отладочная инфа)
    2) на самом деле это и так уже и так работает из коробки, тут ничего делать не надо
    3) как говорилось, есть уже готовый тип text_ru в котором уже настроен русский стеммер. Чтобы текста обрабатывался по "правилу русского языка" нужно либо назвать текстовое поле *_text_ru либо явно создать новое поле в админке в разделе schema и указать ему тип text_ru
    4) это и так будет происходить если использовать тип данных с русским стеммером, то есть слова будут искаться по корню а окончания отбрасываться
    Ответ написан
    Комментировать