#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
файле.