Я обнаружил это, когда запускаю запрос Solr, как показано ниже.
q:+fruit +"apple and banana"
ExtendedDismaxQParser преобразует его в приведенный ниже. (Используя флаг debugQuery, я смог увидеть преобразование при переходе от строки запроса к parsedquery в выводе отладки.)
+fruit +"apple ? banana"
Это, очевидно, изменяет запрос, чтобы сопоставить слова яблоко и банан с любым словом между ними. Не ожидаемое поведение для фразы в запросе.
Есть ли способ отключить это поведение, чтобы оно учитывало слова И и ИЛИ внутри фразы?
Ниже приведена очищенная версия вывода отладки JSON.
"rawquerystring":"+(field1:\"apple and health\"^1 field2:\"apple and banana\"^5 field3:\"apple and banana\"^1)",
"querystring":"+(field1:\"apple and banana\"^1 field2:\"apple and banana\"^5 field3:\"apple and banana\"^1)",
"parsedquery":"(+(PhraseQuery(field1:\"apple ? banana\") PhraseQuery(field2:\"apple ? banana\"^5.0) PhraseQuery(field3:\"apple ? banana\")) (field2:[* TO *]^10.0 hasdescription:y^10.0) FunctionQuery((200.0/(2.0*float(div(ms(const(1499700124562),date(displaydate)),const(84000000)))+20.0))^7.0) FunctionQuery((float(erpm))^0.0) FunctionQuery((200.0/(2.0*float(geodist(latlon(latlong),39.8027,-86.1557))+20.0))^10.0))/no_coord",
"parsedquery_toString":"+(field1:\"apple ? banana\" field2:\"apple ? banana\"^5.0 field3:\"apple ? banana\") (field2:[* TO *]^10.0 hasdescription:y^10.0) (200.0/(2.0*float(div(ms(const(1499700124562),date(displaydate)),const(84000000)))+20.0))^7.0 (float(erpm))^0.0 (200.0/(2.0*float(geodist(latlon(latlong),39.8027,-86.1557))+20.0))^10.0",
"QParser":"ExtendedDismaxQParser",