Looked at boost a bit more. The # of results remains the same whether the boost parameter is present or not. If it is present the behavior seems to be that if it matches a hit in the result, it does what I expect, however if it does not match the hit, what ends up in the result is completely unexpected with 0 relevancy. It does appear that bq does what I want, but the behavior of boost seems like a bug. We use boost elsewhere and it works as we want, that use case does not involve using the query function though.
-----Original Message----- From: Webster Homer <webster.ho...@milliporesigma.com> Sent: Thursday, April 18, 2019 12:16 PM To: solr-user@lucene.apache.org Subject: boost parameter produces garbage hits Hi, I am trying to understand how the boost (and bq) parameters are supposed to work. My application searches our product schema and returns the best matches. To enable an exactish match on product name we created fields that are minimally tokenized (keyword tokenizer/lowercase). Now I want the search to boost results that match on those fields. I thought that either the boost or bq parameter would work. I found very few good examples of the boost parameter used on a query. A lot of permutations resulted in errors such as this: org.apache.solr.search.SyntaxError: Infinite Recursion detected parsing query 'ethyl alcohol' I am using Solr 7.2 and the eDismax query parser. I have gotten boost to work, sort of, it really changes the query results in a bad way. I'm sure that I'm doing something wrong. Here is an example of my boost parameter boost=product(query({!edismax qf="search_en_p_pri_name_min search_en_root_name_min" v=$q boost=}, 0),10000) When I search for "ethyl alcohol" products named "ethyl alcohol" come first, which is what I want. We have a range of ethyl alcohol products. Normally I expect to see "ethyl alcohol, pure" and "ethyl alcohol, dnatured" after the initial "ethyl alcohol" and I see this without the boost. With the boost I get "ethyl alcohol" with a score of, 3.87201088E8. The second hit is "Brilliant Cresyl blue" with a score of 0. All subsequent hits have a 0 Why are there any matches returned with a score of 0? Why are these hits with a 0 score being returned at all? Especially when more relevant matches are not being returned? I suspect that there is something wrong with my boost function, but it looks right. However if I take it and instead submit the function shown above as a bf parameter I get a syntax error: bf=product(query({!edismax qf="search_en_p_pri_name_min search_en_root_name_min" v=$q bf=}),10000) org.apache.solr.search.SyntaxError: Expected identifier at pos 23 str='product(query({!edismax'" >From the documentation I expected that the bf and boost parameters only >differed as to how the result was boosted with boost being multiplicative and >the bf being additive, but I cannot find an equivalent which actually works >with the bf parameter. The bq parameter doesn't throw an error, but it doesn't seem to have any effect in how the results are ordered. What am I doing wrong? Why does the boost parameter return garbage hits with 0 score? What would work as a bf parameter function?