Solr запрос с пробелами - PullRequest
29 голосов
/ 26 апреля 2011

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

<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

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

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

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

Ответы [ 5 ]

35 голосов
/ 27 апреля 2011

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

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

fq=itemtype:"Supply Chain Intermediaries"

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

fq=itemtype:(Supply Chain Intermediaries)

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

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

Цепи и Посредники будут искать по полю поиска по умолчанию.

14 голосов
/ 15 апреля 2016

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

fq=itemtype: *Supply\ Chain\ Intermediaries*

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

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

Если выимеют слово начинается с Supply Chain Intermediaries Ipsum, а затем просто дать

fq=itemtype: Supply\ Chain\ Intermediaries*
2 голосов
/ 17 октября 2011

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

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

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

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

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

1 голос
/ 26 апреля 2011

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

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

для этой цели

Это исключает необходимость использования! Term вместо! Raw для версии Solr> = 4.0

http://mail-archives.apache.org/mod_mbox/lucene-solr-user/201012.mbox/%3C4D121F73.3090706@jhu.edu%3E

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

0 голосов
/ 10 апреля 2018

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

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

с:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...