Почему Solr в ExtendedDismaxQParser ключевое слово AND и OR преобразуются в вопросительный знак?

Я обнаружил это, когда запускаю запрос 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",


person Richard Adleta    schedule 10.07.2017    source источник
comment
не могли бы вы добавить запрос, который вы используете.   -  person Sanjay Dutt    schedule 10.07.2017
comment
@SanjayDutt Я добавил обработанный отладочный вывод из Solr.   -  person Richard Adleta    schedule 10.07.2017


Ответы (1)


Edismax не имеет к этому никакого отношения. В вашей управляемой схеме вы должны настроить фильтр StopFilterFactory, а файл stopwords.txt содержит слова и, или.
Из-за этого Filter solr не будет индексировать эти слова, и вы не могу запросить потом. Но solr сохраняет положение слов.
Теперь в вашем случае, когда вы ищете "яблоко и банан". Фильтр заменит и на вопросительный знак, так что слова в вашей фразе останутся, чтобы соответствовать содержимому в solr.

person Sanjay Dutt    schedule 11.07.2017
comment
Большое спасибо. Это именно то, что я пытался понять. Слово и действительно является стоп-словом. - person Richard Adleta; 11.07.2017