最后更新时间为2013年7月16日。创建于2011年5月16日。
acbramleyayalonscor编辑登录以编辑此页面

默认情况下,apacheolr Drupal模块设置为在有2个关键字时进行AND搜索,然后对DisMax应用 3个或更多关键字的模糊性这是通过mmsolrconfig.xml中参数设置的,默认为2<-35%

您可以通过mm在查询中将参数设置为solr之前设置参数来禁止此行为

function HOOK_apachesolr_query_alter($query) {
  // Force an OR keyword search.
  $query->params['mm'] = '1';
}

使用Solr 3:

function HOOK_apachesolr_query_alter($query) {
  // Force an AND keyword search.
  $query->replaceParam('mm', '100%');
}

Drupal 7

在Drupal 7中,mm参数默认为1(参见apachesolr_search_basic_params())。这意味着默认行为本质上是一个OR。您可以使用上面相同的replaceParam方法将其更改为AND。

请注意,您将实现此代码的钩子将取决于您正在运行的apachesolr的版本:
hook_apachesolr_prepare_query(),hook_apachesolr_modify_query()或hook_apachesolr_query_alter(),用于最新版本的apachesolr。

寻求支持?访问Drupal.org论坛,或加入IRC中的#drupal-support 

评论

ajross的头像

如果需要使用hook_apachesolr_modify_query(),$ params数组不是$ query对象的一部分。所以它看起来像这样:

function HOOK_apachesolr_modify_query(&$query, &$params, $caller) {
  // Force an OR keyword search.
  $params['mm'] = '1';
}
-enzo-的头像

嘿ajross。

你能提到Apachesolr Drupal模块的版本,Apachesolr和Lucene,你使用的是因为我试过这个参数,但对我不起作用。

还有一个问题,此参数仅适用于关键字内部或关键字和过滤器之间的元素?

在此先感谢您的回复。

恩佐


enzo - Eduardo Garcia 
weKnow- http://www.weknowinc.com
请使用git author选项: - author =“enzo”我在新模块版本中所做的任何补丁

dela.deyoungster的头像

我已经尝试了所有的hook_功能,但它们似乎都不适合我。我正在运行:
Apache Solr PHP客户端库 - 正确版本“版本:22”。
Apache Solr框架(Drupal模块) - 6.x-1.3 
Drupal - 6.19。

任何帮助将深表感谢。谢谢。

WoozyDuck的头像

这对我也不起作用

ayalon的头像

function HOOK_apachesolr_query_alter($query) {
  // Force an OR keyword search.
  $params['mm'] = '100%';
}
斯洛梅的照片

我正在使用Solr 3.4和Drupal 7.工作原理是:

<?php
function HOOK_apachesolr_query_alter(&$query) {
  // Force an OR keyword search.
  $query->addParam('mm', 1);
}
?>
WidoW的头像

将schema.xml中的默认运算符更改为“OR”在D7 + SOLR 3.4上为我工作。

巴特图集的图片

下面的代码适用于D7.26,Solr 4.5.1,Solr模块7.x-1.5 
看起来mm param总是被添加,所以你可以只做replaceParam()行。

编辑:我在完成此操作后重新阅读了上述文档,并且D7的说明很清楚,我只是误读了它们。

请注意,addParam()将不起作用,因为不是替换参数值(如apachesolr.interface.inc中addParam()的注释中所示),调用此函数实际上会导致mm的两个值('1'和' 100%')。

function HOOK_apachesolr_query_alter(DrupalSolrQueryInterface $ query){ 
//强制进行AND关键字搜索。
//使用1强制OR(默认值),100%强制AND 
$ mmvalue = $ query-> getParam('mm'); 
if(isset($ mmvalue)){ 
$ query-> replaceParam('mm','100%'); 

else { 
$ query-> addParam('mm','100%'); 

}

neha_sinha05的头像

在solrdata是像“新年快乐”的索引。我把它作为自动完成。一旦我选择了这个,现在要求solr的查询是“快乐”+ AND +“新”+“年”,所以solr没有给出结果。如何在查询中进行更改,以便以“happy + new + year”的形式命中solr

来自  https://www.drupal.org/node/1159424