#solr
Вопрос:
Я работаю над решением для поиска в своем проекте, и все работает нормально, за исключением одного сценария. Операция поискового запроса-это И (q.op=И), когда я ищу что-то, например: 40486 52P.57
это не дает никаких результатов (здесь запрос готовится на java), но когда я выполняю тот же поиск в панели администратора solr, он дает правильные результаты. В моем коде Java я избегаю поискового запроса , поэтому запрос передается в solr, как q : 40486\ 52P.57
, но когда я выполняю его в администраторе solr, это было похоже q : 40486 52P.57
.
Примечание: два слова в приведенном выше поисковом запросе относятся к двум разным полям.
Другая вещь, которую я заметил, было то, что если слова в поисковом запросе относятся к одной сфере, то результаты идут прекрасно без каких-либо проблем, например: 40486 67
когда оба слова принадлежат к одной области, а запрос из моего кода Java был q: 40486\ 67
и в гумз админ был q : 40486 67
, но в обоих случаях он работает нормально.
Я не видел здесь никаких проблем, может кто-нибудь, пожалуйста, помочь мне в этом?
Обновить
Я нашел основную причину, по которой это не работает. Проблема в том, что при выходе из пространства. На самом деле я использую отдельные поля qf
для поиска 100% совпадения, я имею в виду mm=100
в данном случае. Таким образом, выход из пространства приведет к тому, что запрос будет выглядеть как q : 40486\ 52P.57
и не даст результатов, но если я использую многополевое поле со всеми полями, доступными для поиска, то это даст результаты, даже если запрос есть q : 40486\ 52P.57
. Является ли это ограничением для edismax в solr? может кто-нибудь, пожалуйста, помочь мне, как это исправить, не создавая мультиполя? Я ожидаю, что он должен работать даже после выхода из пространства, используя отдельные поля в qf
параметре.
Примерный индекс:
{
productNumber : 40486754,
productShot : 52P.57 UTM,
description : something,
general_search {
40486754,
52P.57 UTM,
something
}
},
{
productNumber : 12345,
productShot : 52P.57 ABC,
description : xzy,
general_search {
12345,
52P.57 ABC,
xzy
}
}
Примеры запросов:
Запрос 1:
qt=/selectamp;q.op=ANDamp;defType=edismaxamp;q=40486 52P.57amp;qf=productNumber productShot description
Запрос 2:
qt=/selectamp;q.op=ANDamp;defType=edismaxamp;q=40486 52P.57amp;qf=productNumber productShot description
Запрос 3:
qt=/selectamp;q.op=ANDamp;defType=edismaxamp;q=40486 52P.57amp;qf=general_search
в приведенных выше запросах запросы 2 и 3 работают, но не запрос 1
Комментарии:
1. Я бы предложил добавить
debug=true
к вашим запросам и в ответе посмотреть наdebug/parsedQuery
значение и посмотреть, сможете ли вы определить, что между ними анализируется по-разному.2. Привет @HectorCorrea, извините за поздний ответ. Да, я сделал это, и проблема заключалась в том, что пробел был удален, когда я не избежал пробелов, это работает так, как ожидалось. На самом деле, когда пробел был удален, поиск был похож на «40486 52 Стр. 57» и рассматривался как одно слово, а когда пробел не был удален, это было похоже на два разных слова 40486 и 52 стр. 57, так что это работает.
Ответ №1:
Проблема заключалась в том, чтобы избежать пробелов. Когда я избегал пробела, оно рассматривалось как одно слово «40486 52P.57», а когда пробел не был удален, оно рассматривалось как два разных слова 40486 и 52P.57, так что все работает нормально.