我正在使用 Drupal ApacheSolr Multisite Module,由于它的依赖性 Apache Solr Search 配置目前仅支持 Solr 5.x。我正在使用 Solr 7 并更新了大部分配置。除了 /select 之外,我的一切都正常。我相信这是因为模块提供的查询(如下所示的示例)具有“q”值,这显然会导致它失败。 solrconfig.xml 中有没有办法将所有选择的 q 设置为“* . *”?如果可能的话,出于部署目的,我希望避免对 Drupal 模块本身进行代码更改。
Solar REST 请求示例
http://localhost:8983/solr/drupal_multisite/select?start=0&rows=10&fq=%28hash%3A6qegyq%20OR%20access__all%3A0%29&fq=%28hash%3A6qegyq%29&spellcheck=true&q=test&fl=id%2Centity_id%2Centity_type%2Cbundle%2Cbundle_name%2Clabel%2Css_language%2Cis_comment_count%2Cds_created%2Cds_changed%2Cscore%2Cpath%2Curl%2Cis_uid%2Ctos_name%2Chash%2Csite&mm=1&pf=content%5E2.0&ps=15&hl=true&hl.fl=content&hl.snippets=3&hl.mergeContigious=true&f.content.hl.alternateField=teaser&f.content.hl.maxAlternateFieldLength=256&spellcheck.q=test&qf=content%5E40&qf=label%5E5.0&qf=tags_h1%5E5.0&qf=tags_h2_h3%5E3.0&qf=tags_h4_h5_h6%5E2.0&qf=tags_inline%5E1.0&qf=tos_content_extra%5E0.1&qf=tos_name%5E3.0&qf=ts_comments%5E20&wt=json&json.nl=map
solarconfig.xml 示例
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="df">text</str>
<str name="q">*:*</str>
<str name="q.alt">*:*</str>
</lst>
</requestHandler>
谢谢您的建议!
可以从您自己的 drupal 模块更改查询,Apache Solr 搜索模块为此公开了一个钩子 (
hook_apachesolr_query_alter()
)。
/**
* Implementation of hook_apachesolr_query_alter().
*
* @param DrupalSolrQueryInterface $query
* @see apachesolr.interface.inc
*/
function yourmodule_apachesolr_query_alter(DrupalSolrQueryInterface $query) {
$query->replaceParam('q', '*:*');
}
话虽这么说,如果您“除 /select 之外的所有内容都正常工作”,您的问题可能与请求调度程序的
handleSelect
参数有关,该参数是影响请求行为的选项,例如 /select?qt=XXX
(请阅读 SOLR从 SOLR 4 升级到 SOLR 6 后 mm 和短语查询不起作用(如果您不明白我的意思)。
如果你可以编写一些代码(没有在drupal模块中,而是一个独立的类/jar),那么你可以编写一个solr插件(https://wiki.apache.org/solr/SolrPlugins)并编写一个自定义处理程序对于“/选择” (https://medium.com/@wkaichan/custom-request-handler-in-apache-solr-4f76521b031a)并在该处理程序中将“q”参数覆盖为“.”并调用原始处理程序。