Извините за длинный текст, это немного сложно объяснить:
Мы используем Solr для индексации некоторой пользовательской информации, такой как имя пользователя, электронная почта (среди прочего).
I'mтакже пытаюсь использовать фасеты для поиска, поэтому, например, я добавил для пользователя поле с несколькими значениями, называемое «организаций», где я буду хранить названия организаций, в которых работает пользователь.
Так что я могу использовать этополе для фасетного поиска и возможность фильтрации результатов пользовательского поискового запроса по организациям, для которых этот пользователь работает.
Итак, теперь у меня проблема в том, что мой код делает что-то вроде: 1) Добавить документы пользователей в Solr 2) Когда пользователю назначается членство в организации (роль), обновите документацию пользователя, чтобы задать поле организации
Теперь у меня возникает следующая проблема с шагом 2: если я просто делаю addField («организации», «BigCorp ") в пользовательском документе, он добавит это значение независимо от того, есть ли у организации это значение (" BigCorp ") или нет, но я хочу, чтобы каждое имя организации появлялось только один раз.
ИтакЕдинственный способ найти такое поведение - это запросить пользовательский документ, получить значения «organization» и добавить новое значение только в том случае, если его там еще нет - если! userDoc.getValues («Organizations»).{... добавьте значение в документ и сохраните его ...} -
Теперь это работает хорошо, но только если я фиксирую все время (по крайней мере, между шагами 1 и 2), потому что документзапрос не будет работать, если он не был уже зафиксирован.Очевидно, что теоретически лучше не совершать все время с точки зрения производительности и непрактично, поскольку я обрабатываю эти вставки в пакетах.
Так что я думаю, что основной проблемой будет:
Есть ли способ обновить многозначное поле, не допуская дубликатов, для которого не нужно запрашивать документ для предотвращения дубликатов вручную?
Возможно, некоторыелучший способ сделать это?
Спасибо.