Я настроил пример solr techproducts в solr 7.2.1 и сделал одно изменение: я нашел файл stopwords.txt и добавил «a» в качестве стоп-слова. Затем я выполняю два запроса в режиме отладки, чтобы увидеть, как анализируется запрос.
Я пробовал два запроса: "x a b" и "x b".
Вот необработанный запрос:
q=x b&fl=id,score,price&sort=score desc&qf=name^0.75 manu cat^3.0 features^10.0&defType=edismax
и
q=x a b&fl=id,score,price&sort=score desc&qf=name^0.75 manu cat^3.0 features^10.0&defType=edismax
Идея состоит в том, что мне нужны разные весовые коэффициенты для разных полей, и я хочу иметь возможность брать оценку каждого слагаемого из его наилучшего поля, то есть получать оценку «х» по совпадению с полем «кошка» и «b» против поля «черты».
Когда у меня есть «x b», я получаю именно это поведение с помощью разобранного запроса следующим образом:
+(((name:x)^0.75 | manu:x | (features:x)^10.0 | (cat:x)^3.0) ((name:b)^0.75 | manu:b | (features:b)^10.0 | (cat:b)^3.0))
Когда я использую "x a b", я вместо этого получаю:
+((name:x name:b)^0.75 | (manu:x manu:b) | (features:x features:b)^10.0 | (cat:x cat:a cat:b)^3.0)
С помощью запроса "x a b" предположим, что документ 1 соответствует "x" в "features" и соответствует "b" в "cat". Этот документ получит единственную оценку, основанную либо на его «x», либо на «b», но оценка не будет суммой, как в случае запроса «x b».
Как заставить синтаксический анализатор edismax вести себя одинаково для запросов со стоп-словами, как это происходит без стоп-слов, сохраняя поведение постоянным для запросов без стоп-слов?
Я также заметил, что это, похоже, не влияет на парсер запросов dismax - только парсер запросов edismax.