Solr. Обновление многозначного поля документа (без дублированных значений) без необходимости его фиксации - PullRequest
0 голосов
/ 28 октября 2011

Извините за длинный текст, это немного сложно объяснить:

Мы используем Solr для индексации некоторой пользовательской информации, такой как имя пользователя, электронная почта (среди прочего).

I'mтакже пытаюсь использовать фасеты для поиска, поэтому, например, я добавил для пользователя поле с несколькими значениями, называемое «организаций», где я буду хранить названия организаций, в которых работает пользователь.

Так что я могу использовать этополе для фасетного поиска и возможность фильтрации результатов пользовательского поискового запроса по организациям, для которых этот пользователь работает.

Итак, теперь у меня проблема в том, что мой код делает что-то вроде: 1) Добавить документы пользователей в Solr 2) Когда пользователю назначается членство в организации (роль), обновите документацию пользователя, чтобы задать поле организации

Теперь у меня возникает следующая проблема с шагом 2: если я просто делаю addField («организации», «BigCorp ") в пользовательском документе, он добавит это значение независимо от того, есть ли у организации это значение (" BigCorp ") или нет, но я хочу, чтобы каждое имя организации появлялось только один раз.

ИтакЕдинственный способ найти такое поведение - это запросить пользовательский документ, получить значения «organization» и добавить новое значение только в том случае, если его там еще нет - если! userDoc.getValues ​​(«Organizations»).{... добавьте значение в документ и сохраните его ...} -

Теперь это работает хорошо, но только если я фиксирую все время (по крайней мере, между шагами 1 и 2), потому что документзапрос не будет работать, если он не был уже зафиксирован.Очевидно, что теоретически лучше не совершать все время с точки зрения производительности и непрактично, поскольку я обрабатываю эти вставки в пакетах.

Так что я думаю, что основной проблемой будет:

  • Есть ли способ обновить многозначное поле, не допуская дубликатов, для которого не нужно запрашивать документ для предотвращения дубликатов вручную?

  • Возможно, некоторыелучший способ сделать это?

Спасибо.

1 Ответ

1 голос
/ 28 октября 2011

Пара вещей -

  • Для нескольких повторяющихся значений в граненом поле значение в граненом поле считается только один раз. Таким образом, даже если вы добавите несколько одинаковых значений, это будет отражено как одно значение в записи количества фасетов. Испытали это. Вы тоже можете подтвердить.
  • Кроме того, когда вы переиндексируете документ, зачем вам нужно проверять что в существующем документе. Как я полагаю, у вас будет уникальный список организаций, и при подаче в Solr документ будет удален и вставлен.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...