Два запроса не совпадают. (И вам не хватает (
в начале)
title:business OR statistics) OR (name:business OR statistics)
ищет business
в поле title
и statistics
в поле поиска по умолчанию (так как это не кажется как у вас есть qf
параметр), или business
в поле name
и снова, statistics
в поле поиска по умолчанию.
Так действует:
title = business or name = business or statistics in default search field
Ваш второй запрос:
title:statistics OR business) OR (name:statistics OR business)
.. ищет statistics
в поле title
, business
в поле поиска по умолчанию, statistics
в поле имени или business
(снова) в поле поиска по умолчанию. В действительности:
title = statistics or name = statistics or business in the default search field
.. как видите, эти два запроса не совпадают. Префикс field:
действителен только для токена, который следует сразу за ним, но не для других токенов.
Используя обработчик edismax, я предлагаю вам переписать его вместо параметра qf
(поля запроса ), который сообщает Solr, какие поля запрашивать. Два ваших примера можно упростить до:
q=statistics business&qf=name title
.. поиск statistics
и business
в двух полях, указанных в параметре qf
. Вы можете использовать q.op=OR
для получения совпадений, где присутствует любой из терминов (как в вашем примере), или q.op=AND
для получения совпадений, где присутствуют оба.
В этом случае statistics business
и business statistics
так как запрос даст вам тот же результат.
Если вы хотите использовать явный синтаксис (он же синтаксис Lucene), вы можете использовать форму field:(term1 OR term2)
- title:(business OR statistics) OR name:(business OR statistics)
- но так как вы уже используете обработчик edismax
, я рекомендую использовать встроенная поддержка более естественных запросов и использование qf
для определения полей для поиска. Вы также можете использовать веса с qf
, чтобы по-разному взвешивать попадания в два поля - qf=name^3 title
даст в три раза больше веса любым попаданиям в поле name
.