локальный параметр не работает в solr 8, но работает в solr 5

Я перехожу с solr 5.5 на solr 8. Запрос для solr 5.5 выглядит так:

qt=/dismax
product_fields_Ref1=product_concept^279841
sku_and_product_fields_Ref1=silhouette_concept^234256 $product_fields_Ref1
product_phrase_Ref2=pant
concept_with_synonyms_ref1=({!edismax2 qf=$sku_and_product_fields_Ref1     v=$product_phrase_Ref2})
top_concept_query_ref= (+({!maxscore v=$concept_with_synonyms_ref1}) ) 
productQueryRef3=+(+({!query v=$cq})) +( ({!maxscore v=$top_concept_query_ref}) ) 
sq=+{!lucene v=$productQueryRef3}
q={!parent tag=top which=$pq score=max v=$sq}

Но выдает ошибку на solr 8.0 с ошибкой -

Ошибка сервера по адресу http://localhost:8080/products: org.apache.solr.search.SyntaxError: Поле запроса «$ product_fields_Ref1» не является допустимым именем поля.

Если я изменю запрос следующим образом (удалю переменную product_fields_Ref1 и добавлю значение непосредственно в sku_and_product_fields_Ref1) -

qt=/dismax
sku_and_product_fields_Ref1=silhouette_concept^234256 product_concept^279841
product_phrase_Ref2=pant
concept_with_synonyms_ref1=({!edismax2 qf=$sku_and_product_fields_Ref1     v=$product_phrase_Ref2})
top_concept_query_ref= (+({!maxscore v=$concept_with_synonyms_ref1}) ) 
productQueryRef3=+(+({!query v=$cq})) +( ({!maxscore v=$top_concept_query_ref}) ) 
sq=+{!lucene v=$productQueryRef3}
q={!parent tag=top which=$pq score=max v=$sq}

Проблема в том, что я не могу изменить этот запрос, так как значение параметра "product_fields_Ref1" компилируется из большого количества мест. Я использую только defType=dismax. Может ли кто-нибудь подсказать, что нужно исправить?


person Vibhav Singh Rohilla    schedule 12.11.2019    source источник


Ответы (2)


Я просмотрел исходный код «org.apache.solr.search.ExtendedDismaxQParser» и обнаружил, что добавлена ​​новая проверка проверки, которая НЕ разрешает локальный параметр в парсере edismax поля qf (эта проверка была введена, начиная с solr 8.0.0 ).

Проверка работает так -

любой параметр, поступающий в qf, ДОЛЖЕН соответствовать полю в схеме (я не использую режим без схемы) ядра. метод

проверитьПоляЗапроса(вверх);

Это выполняется в

public Query parse() выдает SyntaxError { ... }

of

org.apache.solr.search.ExtendedDismaxQParser

Я получил эту работу, создав свой собственный анализатор и удалив этот валидатор после переопределения метода parse().

person Vibhav Singh Rohilla    schedule 14.11.2019

Поддержка локальных параметров значительно изменилась в более поздних версиях Solr (см. https://lucene.apache.org/solr/guide/7_5/solr-upgrade-notes.html#solr-7-2)

Единственный способ, которым я смог вернуть часть поведения, — установить lucene в качестве синтаксического анализатора по умолчанию в solrconfig.xml, а затем передать локальные параметры в запросе, например: q={!dismax qf=$param1}coffee

Я понимаю, что вы можете вернуть старое поведение, переключившись на LuceneMatchVersion 7.1.0, но мне это изменение не помогло.

person Hector Correa    schedule 12.11.2019
comment
Спасибо @hector за то, что уделили этому время. У меня возникла основная проблема, почему это происходит только в solr 8.0.0, а не в более ранних версиях. Я поместил свои выводы в ответ. - person Vibhav Singh Rohilla; 14.11.2019