Solr Cloud — запрос к уникальному полю возвращает разные результаты

Я столкнулся с проблемой, когда запрос к нашему поиску Solr возвращает разные значения. Однако я запрашиваю идентификатор, который установлен как поле уникального ключа.

введите здесь описание изображения

Итак, в пользовательском интерфейсе администратора Solr я выполню запрос, например.

введите здесь описание изображения

Соответствующая информация об ответе приведена ниже.

 "response": {
    "numFound": 1,
    "start": 0,
    "maxScore": 7.4537606,
    "docs": [
      {
        "title": [
          "ICARDA forced to move"
        ],
        "moduleid_s": "58",
        "id": "client1.com.58.1673",
        "enddate_dt": "2015-09-25T23:59:00Z",
        "url": "mysite.com/item.aspx?id=1673",
        "startdate_dt": "2015-09-25T00:00:00Z",

Теперь выполнение этого запроса несколько раз в конечном итоге приведет к другому ответу.

 "response": {
    "numFound": 1,
    "start": 0,
    "maxScore": 7.453251,
    "docs": [
      {
        "title": [
          "ICARDA forced to move"
        ],
        "moduleid_s": "58",
        "id": "client1.com.58.1673",
        "enddate_dt": "2015-09-25T23:59:00Z",
        "url": "mysiteNewUrl.com/item.aspx?id=1673",
        "startdate_dt": "2015-09-25T00:00:00Z",

Обратите внимание, что URL отличается.

С проверенным запросом отладки. Вы можете видеть, что разные URL-адреса находятся в разделе GET_FIELDS.

Почему/как я могу получить другую информацию? Я запрашиваю идентификатор, отмеченный уникальным полем. Насколько я понимаю, их никогда не должно быть больше. Может ли это быть проблемой синхронизации? Я использую запрос пользовательского интерфейса администратора Solr с выбранным одним ядром.

Есть ли способ проверить, находится ли в индексе только один документ с этим идентификатором?

ОБНОВЛЕНИЕ:

Я выполнил фасетный запрос, и этот уникальный результат вернул 2

<lst name="facet_fields">
 <lst name="id">
<int name="client1.com.58.1673">2</int>

по сравнению с тем, у которого нет проблемы.

<lst name="facet_fields">
 <lst name="id">
<int name="client1.com.58.163">1</int>

Это правильно? Объясняет ли это мою проблему в том, что есть дубликаты документов, но если это так, почему возвращаются не два документа, а просто разные данные?


person Adam    schedule 23.09.2015    source источник
comment
Это может произойти только в том случае, если вы переиндексировали или проиндексировали другой документ с таким же идентификатором.   -  person YoungHobbit    schedule 23.09.2015
comment
@YoungHobbit: Таким образом, у вас может быть два документа с одним и тем же полем уникального ключа. У меня сложилось впечатление, что Solr просто перезапишет, если поле уникального ключа будет одинаковым.   -  person Adam    schedule 23.09.2015
comment
Так и должно быть, если вы явно не укажете ему игнорировать ограничение uniqueKey. Я предполагаю, что могло быть изменение в макете кластера (или изменение маршрутизатора документов) между двумя заданиями индексирования, в результате чего документы маршрутизировались по-разному.   -  person MatsLindh    schedule 23.09.2015
comment
@MatsLindh, вот о чем я думал. Мы недавно обновились до Solr 5.3 с 4.6, я думаю. Могло ли это стать причиной проблемы. Я выполнил несколько фасетных запросов, см. мое обновление в вопросе.   -  person Adam    schedule 24.09.2015


Ответы (1)


Это установка SolrCloud или установка с одной коллекцией? Если это облако, вы, скорее всего, получили одну запись в двух разных ядрах. Возможно, из-за маршрутизатора или ошибки обновления.

Хорошая новость: вы сможете найти все записи с этой проблемой, выполнив facet.field=id, facet.mincount=2. Затем вы можете удалить/повторно вставить их для согласованности.

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

person Alexandre Rafalovitch    schedule 24.09.2015