Как использовать объединение с сортировкой в ​​Solr? - PullRequest
2 голосов
/ 21 мая 2019

Я пытаюсь отсортировать документы типа «Дело» по «Имя» «Контакта», которому они принадлежат в Solr.Но в случаях нет поля «ContactName» или аналогичного, только «ContactId».

Только примеры, которые я смог найти, - это итерации примера по этой ссылке: https://wiki.apache.org/solr/Join Но я не смог применить его кмоя ситуация из-за сортировки потом.Ниже приведены нужные мне случаи, но я не могу потом отсортировать их по имени контакта, потому что он возвращает только поля случаев.

{!join from=Id to=ContactId}*:*

SQL-эквивалент того, что я хочу, будет выглядеть примерно так:

SELECT Case.Id, Contact.Name
FROM Case
LEFT JOIN Contact
ON Case.ContactId = Contact.Id
ORDER BY Contact.Name ASC;

1 Ответ

2 голосов
/ 03 июня 2019

Итак, чтобы ответить на мой собственный вопрос после некоторого рытья и обучения Solr:

Не рекомендуется использовать объединения в базе данных NoSql, такой как Solr. Если вам нужны объединения, то ваша база данных структурирована неправильно. Вы должны индексировать все, что вам нужно, в самом документе, даже если он избыточен. Поэтому в моем случае я должен индексировать поле «Contact.Name» в моих документах «Case».

Тем не менее, очевидно, что можно использовать SQL-запросы в Solr, если это абсолютно необходимо, если вы используете SolrCloud, но он не поддерживает объединения. Однако можно обойти это следующим образом:

SELECT s1.Id 
FROM salesforce s1, salesforce s2 
WHERE s1._type_ = 'Case' and s2._type_ = 'Contact' AND s1.ContactId = s2.Id 
ORDER BY s2.Name ASC

Следует отметить, что поля после '.' подобно 'Id' в 's1.Id', в схеме должны быть активированы 'docValues'. Более подробная информация о docValues ​​ здесь .

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