FYI - I recalled, and located, a solr-user thread from 2015 with subject
“Parameter Substitution” with this same issue. Tricky issue - overloaded `${`
usage and interpretation time.
Erik
> On Mar 1, 2017, at 1:41 PM, Erik Hatcher <[email protected]> wrote:
>
> I just found a workaround, check out this trick:
>
> <str name="sort">${sort_field:${sort_field}} desc</str>
>
> when the core is loaded, it looks for a system property “sort_field”, doesn’t
> find it, and defaults the value to ${sort_field} and voila:
>
> /browse?q=*:*&wt=xml&sort_field=id
>
> Erik
>
>
>> On Mar 1, 2017, at 1:14 PM, Erik Hatcher <[email protected]> wrote:
>>
>> Walter -
>>
>> Apologies for not trying this sooner first-hand. I’m used to passing in
>> all the params (even the dynamic ${…} ones) in the request these days, not
>> so much putting them into request handler definitions.
>>
>> I finally tried it with a default (master/trunk) with modifying the /browse
>> handler with this:
>>
>> <requestHandler name="/browse" class="solr.SearchHandler"
>> useParams="query,facets,velocity,browse">
>> <lst name="defaults">
>> <str name="echoParams">explicit</str>
>> <str name="sort">${sort_field} desc</str>
>> </lst>
>> </requestHandler>
>>
>> And get this startup error:
>>
>> Caused by: org.apache.solr.common.SolrException: No system property or
>> default value specified for sort_field value:${sort_field} desc
>> at
>> org.apache.solr.util.PropertiesUtil.substituteProperty(PropertiesUtil.java:65)
>> at org.apache.solr.util.DOMUtil.substituteProperties(DOMUtil.java:303)
>>
>> *sigh* and sorry for leading you astray. Definitely a Solr bug.
>>
>> However, this technique does work when everything is in the params:
>>
>> /select?q=*:*&sort=${sort_field}%20desc&sort_field=id
>>
>> @Yonik or others - is this a known/filed issue? Workarounds or escaping
>> that could make it work?
>>
>> Erik
>>
>>
>>> On Feb 27, 2017, at 10:39 PM, Walter Underwood <[email protected]>
>>> wrote:
>>>
>>> No, I tried that before adding the default.
>>>
>>> But the solrconfig.xml is rejected before there is a request, so this is
>>> not about requests. I did try “scores” in the requests, but of course it
>>> didn’t work because the solrconfig.xml was not loaded. I did not turn off
>>> parameter substitutions. This is a pretty vanilla solrconfig.xml.
>>>
>>> wunder
>>> Walter Underwood
>>> [email protected]
>>> http://observer.wunderwood.org/ (my blog)
>>>
>>>
>>>> On Feb 27, 2017, at 6:44 PM, Erik Hatcher <[email protected]> wrote:
>>>>
>>>> `scores` (plural), you’ve got this below: <str name="scores"></str>
>>>>
>>>> Remove that, and like my previous e-mail, and use `scores` (plural) from
>>>> the request and _should_ work?
>>>>
>>>> Erik
>>>>
>>>>> On Feb 27, 2017, at 9:42 PM, Walter Underwood <[email protected]>
>>>>> wrote:
>>>>>
>>>>> I’ve passed in a score parameter, but the solrconfig.xml is rejected
>>>>> before any requests.
>>>>>
>>>>> Pretty ready to give up. The documentation around function queries and
>>>>> params is not working for me, though I’ve been using Solr for ten years.
>>>>> I have figured out a lot of systems. This is impenetrable.
>>>>>
>>>>> wunder
>>>>> Walter Underwood
>>>>> [email protected]
>>>>> http://observer.wunderwood.org/ (my blog)
>>>>>
>>>>>
>>>>>> On Feb 27, 2017, at 6:35 PM, Erik Hatcher <[email protected]> wrote:
>>>>>>
>>>>>> You have an empty “scores” parameter in there. You’re not showing your
>>>>>> full search request, but did you provide that in the request? Have you
>>>>>> perhaps turned off parameter substitutions?
>>>>>>
>>>>>> Erik
>>>>>>
>>>>>>> On Feb 27, 2017, at 9:26 PM, Walter Underwood <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>> With this in the config…
>>>>>>>
>>>>>>> <requestHandler name="/display_tutor_rank" class="solr.SearchHandler">
>>>>>>> <!-- Note! Needs FuzzyDismax handler! -->
>>>>>>> <lst name="defaults">
>>>>>>> <str name="defType">edismax</str>
>>>>>>> <str name="mm">0</str>
>>>>>>> <bool name="lowercaseOperators">false</bool>
>>>>>>> <str name="fl">id,
>>>>>>> image_thumb_large, image_thumb_medium, image_thumb_small,
>>>>>>> image_thumb_xlarge, uri, user_id, last_name, first_name,
>>>>>>> name, school, major, graduation_year, tutor_profile_id,
>>>>>>> positive_reviews, negative_reviews, gender, about_experience,
>>>>>>> about_extracurricular, time_approved</str>
>>>>>>> <str name="q.alt">*:*</str>
>>>>>>> <str name="qf">about_experience about_extracurricular School
>>>>>>> Major</str>
>>>>>>> <str name="scores"></str>
>>>>>>> <str
>>>>>>> name="sort">sum(interaction_responsiveness_score,profile_completeness_score,school_score,us_tax_id_score,highlight_score,${scores})
>>>>>>> desc</str>
>>>>>>> <str name="boost">log(sum(1,max(positive_reviews,0)))</str>
>>>>>>> <str name="tie">0.1</str>
>>>>>>> </lst>
>>>>>>> </requestHandler>
>>>>>>>
>>>>>>> I see this… [Solr 6.3.0]
>>>>>>>
>>>>>>> org.apache.solr.common.SolrException: Unable to reload core
>>>>>>> [tutors_shard1_replica11]
>>>>>>> at
>>>>>>> org.apache.solr.core.CoreContainer.reload(CoreContainer.java:950)
>>>>>>> at
>>>>>>> org.apache.solr.core.SolrCore.lambda$getConfListener$6(SolrCore.java:2708)
>>>>>>> at
>>>>>>> org.apache.solr.cloud.ZkController.lambda$fireEventListeners$4(ZkController.java:2448)
>>>>>>> at java.lang.Thread.run(Thread.java:745)
>>>>>>> Caused by: org.apache.solr.common.SolrException: Could not load conf
>>>>>>> for core tutors_shard1_replica11: Error loading solr config from
>>>>>>> solrconfig.xml
>>>>>>> at
>>>>>>> org.apache.solr.core.ConfigSetService.getConfig(ConfigSetService.java:85)
>>>>>>> at
>>>>>>> org.apache.solr.core.CoreContainer.reload(CoreContainer.java:942)
>>>>>>> ... 3 more
>>>>>>> Caused by: org.apache.solr.common.SolrException: Error loading solr
>>>>>>> config from solrconfig.xml
>>>>>>> at
>>>>>>> org.apache.solr.core.SolrConfig.readFromResourceLoader(SolrConfig.java:187)
>>>>>>> at
>>>>>>> org.apache.solr.core.ConfigSetService.createSolrConfig(ConfigSetService.java:97)
>>>>>>> at
>>>>>>> org.apache.solr.core.ConfigSetService.getConfig(ConfigSetService.java:77)
>>>>>>> ... 4 more
>>>>>>> Caused by: org.apache.solr.common.SolrException: No system property or
>>>>>>> default value specified for scores
>>>>>>> value:sum(interaction_responsiveness_score,profile_completeness_score,school_score,us_tax_id_score,highlight_score,${scores})
>>>>>>> desc
>>>>>>> at
>>>>>>> org.apache.solr.util.PropertiesUtil.substituteProperty(PropertiesUtil.java:65)
>>>>>>> at
>>>>>>> org.apache.solr.util.DOMUtil.substituteProperties(DOMUtil.java:298)
>>>>>>>
>>>>>>> wunder
>>>>>>> Walter Underwood
>>>>>>> [email protected]
>>>>>>> http://observer.wunderwood.org/ (my blog)
>>>>>>>
>>>>>>>
>>>>>>>> On Feb 27, 2017, at 6:17 PM, Erik Hatcher <[email protected]>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Walter -
>>>>>>>>
>>>>>>>> How about this, for the latter part of your request:
>>>>>>>>
>>>>>>>> /handler?features=a,b,c
>>>>>>>>
>>>>>>>> with &sort=sum(${features}) desc
>>>>>>>>
>>>>>>>> That ought to do the trick. At first I thought the #foreach nature
>>>>>>>> of the list of features was prohibitive, but since you’re literally
>>>>>>>> plugging in the exact string value and it’s used as a comma-separated
>>>>>>>> list then this should work.
>>>>>>>>
>>>>>>>> But with the just a list of subject ID’s I think you’re in custom
>>>>>>>> development now (or a JavaScript stage in a Fusion query pipeline ;)
>>>>>>>> in building a SearchComponent that takes a `features` parameter and
>>>>>>>> builds the sort param as needed from that.
>>>>>>>>
>>>>>>>> Erik
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> On Feb 27, 2017, at 7:17 PM, Walter Underwood <[email protected]>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> We have documents with parameterized features. For a school subject
>>>>>>>>> (calculus, accounting), we have three sets of features. So for
>>>>>>>>> subject=4 and subject=186, we have:
>>>>>>>>>
>>>>>>>>> feature_a_4: 0.9
>>>>>>>>> feature_b_4: 1.6
>>>>>>>>> feature_c_4: 8.2
>>>>>>>>> feature_a_186: 3.0
>>>>>>>>> feature_b_186: 2.1
>>>>>>>>> feature_c_186: 99.2
>>>>>>>>>
>>>>>>>>> I’d like to pass in the subject IDs and make a function query (for
>>>>>>>>> sorting) from those, ending up with
>>>>>>>>>
>>>>>>>>> sum(feature_x, feature_y, feature_a_4, feature_b_4, feature_c_4,
>>>>>>>>> feature_a_186, feature_b_186, feature c_186) desc
>>>>>>>>>
>>>>>>>>> That would be used for the sort parameter.
>>>>>>>>>
>>>>>>>>> Failing that, it would be nice so just pass in the parameterized
>>>>>>>>> portion, like this:
>>>>>>>>>
>>>>>>>>> /handler?features=feature_a_4,feature_b_4,feature_c_4,feature_a_186,feature_b_186,feature
>>>>>>>>> c_186
>>>>>>>>>
>>>>>>>>> Right now, I can’t even make a solrconfig.xml that will load. I’ve
>>>>>>>>> read everything I can find on params and function queries.
>>>>>>>>>
>>>>>>>>> wunder
>>>>>>>>> Walter Underwood
>>>>>>>>> [email protected]
>>>>>>>>> http://observer.wunderwood.org/ (my blog)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>