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

#solr

#solr

Вопрос:

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

 <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 (заменить пробелы на ). Но это бесполезно. Не могли бы вы, ребята, пожалуйста, помочь мне решить это?

Обновить:

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

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

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

 http://localhost/solr/select/?q=adidasamp;version=2.2amp;indent=onamp;facet=onamp;start=0amp;rows=20amp;fq=(itemtype:Company itemtype:Supply Chain Intermediaries)
  

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

Ответ №1:

Как анализируется ваше поле itemtype?

Если он имеет тип string , то используйте:

 fq=itemtype:"Supply Chain Intermediaries"
  

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

 fq=itemtype:(Supply Chain Intermediaries)
  

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

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

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

Комментарии:

1. Это помогло. Спасибо. Но что, если у нас есть имя некоторого поля с пробелами? Пожалуйста, дайте совет.

2. 1 Спасибо, я использую lbdremy.github.io/solr-node-client кстати, преобразование для типов ввода массива отсутствует, поэтому его необходимо выполнить вручную.

3. Я создаю запрос, используя критерии Solr (fieldname).содержит (значение), которые у меня не работают. Есть предложения?

Ответ №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"

Ответ №4:

Я думаю, вы можете использовать

 fq={!raw f=itemtype}Supply Chain Intermediaries
  

для этой цели

Оказывается, что вы должны использовать !term вместо !raw для версии Solr > = 4.0

<a rel="noreferrer noopener nofollow" href="https:///mail-archives.apache.org/mod_mbox/lucene-solr-user/201012.mbox/» rel=»nofollow»>http://mail-archives.apache.org/mod_mbox/lucene-solr-user/201012.mbox/

Хорошего дня.

Комментарии:

1. Я написал свой новый запрос solr. Не могли бы вы, пожалуйста, проверить и дать предложение.

2. @Brahmaji Нужна ли вам операция OR между фильтрами или операция AND? Для И вы можете просто написать несколько fq фильтров. Но, я думаю, вам не очень повезло с OR. Возможно, вместо этого вы можете попробовать записать свои значения в двойные кавычки, например fq=text:"Chain Intermediaries" . Хотя я этого не пробовал.

Ответ №5:

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

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

с :

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

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