Подтвердить что ты не робот

Запрос solr с пробелом

Я ищу слово и получаю результаты с помощью фасета следующим образом:

<lst name="itemtype">
<int name="Internal">108</int>
<int name="Users">73</int>
<int name="Factory">18</int>
<int name="Supply Chain Intermediaries">6</int>
<int name="Company">1</int>
<int name="Monitor/Auditor firm">0</int>
</lst>

Затем я написал условие типа fq=itemtype:Factory. Я получаю результаты. Но я не получаю результаты для fq=itemtype:Supply Chain Intermediaries.
Я думаю, что проблема заключается в пробелах в условии (посредники цепочки поставок). Я попытался с urlencode (заменить пробелы на %20) также. Но это бесполезно. Ребята, не могли бы вы помочь мне решить эту проблему?

Обновить:

Для одного значения это работает нормально. Я строю запрос так:

http:localhost:8080/solr/select/?q=adidas&version=2.2&indent=on&facet=on&start=0&rows=20&fq={!raw f=itemtype}Supply Chain Intermediaries

Но мне нужно написать для нескольких значений. Оригинальный запрос с из сырья заключается в следующем

http://localhost/solr/select/?q=adidas&version=2.2&indent=on&facet=on&start=0&rows=20&fq=(itemtype:Company itemtype:Supply Chain Intermediaries)

Ребята, пожалуйста, помогите мне решить это.

4b9b3361

Ответ 1

Как анализируется поле вашего элемента данных?

Если это строка типа, используйте:

fq=itemtype:"Supply Chain Intermediaries"

В противном случае вы также можете попробовать:

fq=itemtype:(Supply Chain Intermediaries)

Предполагая, что OR является оператором по умолчанию в вашей конфигурации и text является полем поиска по умолчанию, ваш запрос будет переведен в:

fq=itemtype:Supply OR text:(Chain Intermediaries)

Поиск по цепочке и посредникам осуществляется по умолчанию.

Ответ 2

Я пробовал разные решения, упомянутые здесь, но никто из них не работал. Однако я решил это так:

fq=itemtype: *Supply\ Chain\ Intermediaries*

Здесь пространство будет экранировано с помощью \

Вышеуказанная строка будет соответствовать строкам Lorem Supply Chain Intermediaries Ipsum

Если у вас есть слово начинается с Supply Chain Intermediaries Ipsum то просто дайте

fq=itemtype: Supply\ Chain\ Intermediaries*

Ответ 3

Это не отвечает на этот вопрос напрямую, но может помочь с этой проблемой:

Удалите пробелы перед отправкой в ​​Solr.

Для полей, используемых для огранки, а не для поиска, не важно хранить значение с пробелами. Значение просто рассматривается как ключ. Сохраните поле itemtype следующим образом: "supplychainintermediaries", "monitorauditorfirm" и т.д.

Когда вы показываете значения фасет пользователю, просто используйте словарь, который отображает значения ключей для отображения значений. Например:

"supplychainintermediaries" --> "Supply Chain Intermediaries" "monitorauditorfirm" --> "Monitor/Auditor Firm"

Ответ 5

Я исправил проблему пробелов, заменив:

$tmp[] = $name . ':' . $this->_escapeValue($value);

с:

$tmp[] = $name . ':' .'"'. $this->_escapeValue($value).'"';

Означает добавление цитаты после escape-значения в файле SolrSource.php.