Запрос 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)
Ребята, пожалуйста, помогите мне решить это.
Ответы
Ответ 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"
Ответ 4
Я думаю, вы можете использовать
fq={!raw f=itemtype}Supply Chain Intermediaries
для этой цели
Он настраивает, что вы должны использовать! term вместо! raw для версии Solr >= 4.0
http://mail-archives.apache.org/mod_mbox/lucene-solr-user/201012.mbox/%[email protected]%3E
Хороший день.
Ответ 5
Я исправил проблему пробелов, заменив:
$tmp[] = $name . ':' . $this->_escapeValue($value);
с:
$tmp[] = $name . ':' .'"'. $this->_escapeValue($value).'"';
Означает добавление цитаты после escape-значения в файле SolrSource.php
.