diff --git a/src/php5/solr_functions_params.c b/src/php5/solr_functions_params.c index f6cc9727..bc97a5c3 100644 --- a/src/php5/solr_functions_params.c +++ b/src/php5/solr_functions_params.c @@ -713,7 +713,7 @@ PHP_SOLR_API void solr_arg_list_param_value_fetch(solr_param_t *solr_param, solr { solr_string_append_solr_string(&tmp_buffer, &(current_ptr->contents.arg_list.value)); - if (current_ptr->contents.arg_list.delimiter_override) { + if (current_ptr->contents.arg_list.delimiter_override && *current_ptr->contents.arg_list.delimiter_override) { solr_string_appendc(&tmp_buffer, *current_ptr->contents.arg_list.delimiter_override); } else { solr_string_appendc(&tmp_buffer, separator); @@ -730,7 +730,7 @@ PHP_SOLR_API void solr_arg_list_param_value_fetch(solr_param_t *solr_param, solr solr_string_append_solr_string(&tmp_buffer, &(current_ptr->contents.arg_list.value)); - if (current_ptr->contents.arg_list.delimiter_override) { + if (current_ptr->contents.arg_list.delimiter_override && *current_ptr->contents.arg_list.delimiter_override) { solr_string_appendc(&tmp_buffer, *current_ptr->contents.arg_list.delimiter_override); } else { solr_string_appendc(&tmp_buffer, separator); diff --git a/src/php7/solr_functions_params.c b/src/php7/solr_functions_params.c index 584577f4..3c0af16a 100644 --- a/src/php7/solr_functions_params.c +++ b/src/php7/solr_functions_params.c @@ -700,7 +700,7 @@ PHP_SOLR_API void solr_arg_list_param_value_fetch(solr_param_t *solr_param, solr { solr_string_append_solr_string(&tmp_buffer, &(current_ptr->contents.arg_list.value)); - if (current_ptr->contents.arg_list.delimiter_override) { + if (current_ptr->contents.arg_list.delimiter_override && *current_ptr->contents.arg_list.delimiter_override) { solr_string_appendc(&tmp_buffer, *current_ptr->contents.arg_list.delimiter_override); } else { solr_string_appendc(&tmp_buffer, separator); @@ -717,7 +717,7 @@ PHP_SOLR_API void solr_arg_list_param_value_fetch(solr_param_t *solr_param, solr solr_string_append_solr_string(&tmp_buffer, &(current_ptr->contents.arg_list.value)); - if (current_ptr->contents.arg_list.delimiter_override) { + if (current_ptr->contents.arg_list.delimiter_override && *current_ptr->contents.arg_list.delimiter_override) { solr_string_appendc(&tmp_buffer, *current_ptr->contents.arg_list.delimiter_override); } else { solr_string_appendc(&tmp_buffer, separator); diff --git a/tests/bug_72740.phpt b/tests/bug_72740.phpt index f9302599..e889fccf 100644 --- a/tests/bug_72740.phpt +++ b/tests/bug_72740.phpt @@ -1,5 +1,5 @@ --TEST-- -Solr Bug #72740 - addQueryField return wrong query +Solr Bug #72740 - addPhraseField return wrong query --SKIPIF-- --FILE-- @@ -23,11 +23,36 @@ $dismaxQuery->addPhraseField( "phraseField2", 5, 1 ); $dismaxQuery->addSortField('score', SolrQuery::ORDER_DESC); $dismaxQuery->addSortField('manufacturedate_dt', SolrQuery::ORDER_DESC); +// Scenario 1: DisMax Query Parser - Adds Phrase Fields with both boost and slop. +// Expect: +// - pf parameter should list each phrase field with ~ and ^ prefix for slop and boost value respectively. +$queryResponse = $client->query( $dismaxQuery ); + +print_r($queryResponse->getResponse()->responseHeader->params); + +// Scenario 2: Same as Scenario 1, now including explicit query fields too. +// Expect: +// - pf parameter should list each phrase field with ~ and ^ prefix for slop and boost value respectively. +// - qf parameter should list each query field with a trailing ^ (no boost here). +$dismaxQuery->addQueryField('score'); +$dismaxQuery->addQueryField('manufacturedate_dt'); $queryResponse = $client->query( $dismaxQuery ); print_r($queryResponse->getResponse()->responseHeader->params); +// Scenario 3: Same as Scenario 2, now including explicit boost value for the query fields. +// Expect: +// - pf parameter should list each phrase field with ~ and ^ prefix for slop and boost value respectively. +// - qf parameter should list each query field with a ^ prefix for boost value. +$dismaxQuery->removeQueryField('score'); +$dismaxQuery->removeQueryField('manufacturedate_dt'); +$dismaxQuery->addQueryField('score', 3); +$dismaxQuery->addQueryField('manufacturedate_dt', 7); + +$queryResponse = $client->query( $dismaxQuery ); + +print_r($queryResponse->getResponse()->responseHeader->params); ?> --EXPECTF-- SolrObject Object @@ -39,4 +64,26 @@ SolrObject Object [sort] => score desc,manufacturedate_dt desc [version] => 2.2 [wt] => xml +) +SolrObject Object +( + [q] => *:* + [defType] => edismax + [indent] => on + [qf] => score^ manufacturedate_dt^ + [pf] => phraseField1~5^10 phraseField2~1^5 + [sort] => score desc,manufacturedate_dt desc + [version] => 2.2 + [wt] => xml +) +SolrObject Object +( + [q] => *:* + [defType] => edismax + [indent] => on + [qf] => score^3 manufacturedate_dt^7 + [pf] => phraseField1~5^10 phraseField2~1^5 + [sort] => score desc,manufacturedate_dt desc + [version] => 2.2 + [wt] => xml ) \ No newline at end of file