Как мне сделать так, чтобы Solr возвращал пустой результат?
Я хочу, чтобы мой инструмент поиска работал аналогично поиску в Google, когда исключены все элементы, введенные пользователем (например, пользовательский ввод - -obama). В этих случаях Google возвращает пустой результат. В моем текущем коде моя программа просто делает пустой запрос Solr, что вызывает ошибку в Solr.
Я знаю, что вы можете ввести *:*, чтобы получить все результаты, но что я должен заполнить в своем запросе Solr, чтобы Solr возвращал пустой результат поиска?
РЕДАКТИРОВАТЬ:
Просто чтобы прояснить это, дело в том, что когда у меня есть что-то вроде -obama, я хочу, чтобы Solr возвращал пустой результат поиска. Если вы гуглите -obama, это то, что вы получите, но если вы установите -obama на Solr, то, похоже, результат - все (все документы), за исключением тех, которые имеют "obama"
2 ответа
Если ваш запрос выглядит следующим образом, он возвращает пустой результат для меня:
solr/select/?q=-obama&qf=description&defType=dismax
Он пытается выполнить отрицательный запрос без поискового запроса, поэтому результаты не возвращаются.
Вот ответ, который я получаю:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
<lst name="params">
<str name="q">-obama</str>
<str name="qf">description</str>
<str name="defType">dismax</str>
</lst>
</lst>
<result name="response" numFound="0" start="0"/>
</response>
Вы не должны запрашивать solr, когда нет искомого термина (и я серьезно сомневаюсь, что Google просматривает его поисковые индексы, когда поисковый термин пуст). Эта логика должна быть встроена в любой механизм, который вы используете для анализа предоставленных пользователем терминов запроса, прежде чем создавать запрос solr. Допустим, ввод пользователя представлен в виде простой строки, где каждое слово рассматривается как уникальный термин запроса. Вы хотите разбить строку по пробелам на массив строк, отобразить массив и удалить строки с префиксом "-", а затем создать условия запроса из того, что остается в массиве. Если выравнивание массива дает пустую строку, верните пустой массив вместо того, чтобы вообще запрашивать solr.