В Solr RequestHandler по сути является плагином (модулем логики), который обрабатывает входящие запросы определенным образом.
Вместо того, чтобы «делать» какие-то вещи для фактически поискового запроса, обработчики запросов могут предоставлять функциональность помимо запросов, как, например, импорт данных.
Обычно обработчики запросов в Solr настраиваются на конкретные конечные точки (т.е. URL-адреса) и не выбираются с помощью параметра qt . Однако определенные обработчики поиска могут использовать параметр типа запроса для обработки запроса определенным образом (то есть один обработчик может иметь возможность обрабатывать различные типы запросов).
Какой обработчик использовать, обычно зависит от того, чего вы хотите достичь. Я бы посоветовал вам проверить список предоставленных обработчиков и сопоставить их описания (у многих есть вики-страницы) с тем, что вы хотите сделать.
Для запросов, отличных от SearchHandler по умолчанию, наиболее часто используемым обработчиком запросов является DisMaxRequestHandler ( qt = dismax ), который, по сути, обеспечивает поиск по нескольким полям с использованием различных весовых коэффициентов в зависимости от значимости поля. Люди часто называют это «поиском в Google».
Кроме того, вам может быть интересно посмотреть на MoreLikeThisHandler, который был разработан для предоставления совпадений, похожих на конкретный документ (например, из предыдущего результата поиска).
Обратите внимание, что в качестве источника путаницы DisMaxRequestHandler в более новых версиях Solr фактически предоставляется SearchHandler по умолчанию с типом запроса dismax .
Обработчики настроены в solrconfig.xml :
<requestHandler name="dismax" class="solr.SearchHandler" >
<lst name="defaults">
<str name="defType">dismax</str>
<str name="echoParams">explicit</str>
<float name="tie">0.01</float>
<str name="qf">
id^10.0 keyword^1.5 title^1.0 region^0.5 country^0.5 city^0.5
</str>
<str name="pf">
keyword^1.5 title^1.0 region^0.5 country^0.5 city^0.5
</str>
<str name="bf">
</str>
<str name="mm">
2<-1 5<-2 6<90%
</str>
<int name="ps">100</int>
<str name="q.alt">*:*</str>
<!-- example highlighter config, enable per-query with hl=true -->
<str name="hl.fl">text features name</str>
<!-- for this field, we want no fragmenting, just highlighting -->
<str name="f.name.hl.fragsize">0</str>
<!-- instructs Solr to return the field itself if no query terms are
found -->
<str name="f.name.hl.alternateField">name</str>
<str name="f.text.hl.fragmenter">regex</str> <!-- defined below -->
</lst>
В этом случае qf - это поля и усиления, применяемые для каждого поля. Приведенная выше конфигурация будет искать по идентификатору, ключевому слову, названию, региону, стране и городу. Посетите соответствующую страницу Wiki для получения дополнительной информации (применяется DisMaxRequestHandler).
Самый эффективный способ их использования - это, конечно, сначала узнать, чего именно вы хотите достичь, затем найти наилучшее совпадение с точки зрения обработчика, а затем настроить конфигурацию так, чтобы обеспечить ожидаемые результаты, ожидаемые вами и вашим сообществом.
Создатели ответов - это плагины (модули логики), которые предоставляют способы и средства для написания ответов в определенных форматах. В настоящее время эта концепция применяется главным образом к поискам, где вы будете иметь дело с производными от QueryResponseWriter, которые, в свою очередь, будут выбраны параметром формата ответа wt (в запросе).
Если вы работаете с PHP, то вам, безусловно, будет интересно генерировать дружественные к PHP ответы на ваши запросы, используя wt = php или wt = phps .
Ответ php можно избежать:
$code = file_get_contents('http://localhost:8983/solr/select?q=iPod&wt=php');
eval("\$result = " . $code . ";");
print_r($result);
и ответ phps можно прочитать с помощью механизма сериализации PHP:
$serializedResult = file_get_contents('http://localhost:8983/solr/select?q=iPod&wt=phps');
$result = unserialize($serializedResult);
print_r($result);
Существует поддержка других (таких как Ruby, Python, Java Binary и т. Д.), Которые, по сути, были созданы для того, чтобы облегчить разработчикам интеграцию SOLR в их веб-приложения с использованием механизмов, более быстрых, чем синтаксический анализ XML или JSON.
Однако существуют и другие типы ResponseWriter, которые фактически преобразуют ответ, основанный на шаблоне (например, Velocity) или преобразовании (например, XSLT). Это может быть полезно в определенных ситуациях, когда вы не хотите зависеть от другого приложения для обработки результатов запроса (например, XSLT непосредственно в XHTML).
писатели ответов также настраиваются в solrconfig.xml , обычно вы включаете те, которые вас интересуют, например ::101062
<queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
<queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
<queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
<queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
Наиболее эффективный способ их использования зависит от вашей среды и того, чего вы хотите достичь. Очевидно, что если вы работаете в PHP, phps может дать вам лучший (легкий доступ через язык) и более быстрый (встроенный механизм сериализации, менее подробный) результат. Если в Javascript, json может быть просто путь и т. Д.
Видите ли, SOLR - мощная и универсальная платформа :)
Если вы хотите проложить путь сквозь джунгли, вы можете прибегнуть к какой-нибудь книге, например «Сервер корпоративного поиска Solr 1.4» (хотя я не уверен, что это действительно лучшая работа в качестве введения) , Многие вещи, которые вы можете лучше всего определить методом проб и ошибок, а также терпение и некоторую онлайн-помощь.
Надеюсь, это поможет вам.