заблокирован запросом solr для многозначных полей - PullRequest
0 голосов
/ 27 апреля 2018

У меня проблема с логическим запросом solr. Вот моя структура индекса:

"docs":[
        {
    "id":"doc1",
     "type.id": [
              "1",
              "2",
              "3"
            ],
            "type.demande": [
              "non",
              "non",
              "oui"
            ],
            "type.reponse": [
              "oui",
              "oui",
              ""
            ],
            "type.traitement": [
              "oui",
              "oui",
              "non"
            ]

    },
    {
    "id":"doc2",
     "type.id": [
              "1",
              "2",
              "3"
            ],
            "type.demande": [
              "non",
              "non",
              "non"
            ],
            "type.reponse": [
              "oui",
              "oui",
              "non"
            ],
            "type.traitement": [
              "oui",
              "oui",
              ""
            ]
    }
    ]

Каждое поле type.id, demande, reponse и traitement многозначно. Каждый тип представляет собой группу из этих 4 полей. Ex. : type id 1 из doc 2 имеет demande "non", ответ "oui", traitement "oui". Я хочу сделать запрос последнего значения этих полей, чтобы отфильтровать значения последнего вставленного типа. Пример запроса solr:

q=(type.demande:"oui" AND (type.reponse:"" OR type.reponse:"non"))

Когда я пытаюсь выполнить этот запрос, кажется, что solr будет искать любое значение, соответствующее в полях. Я искал в solr docs, но я не нашел предложения "last" или "lastValueOf", которое позволило бы мне сделать это.

Спасибо.

1 Ответ

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

Вы не можете с плоскими документами, на самом деле - но вы можете сделать это с дочерними документами . Существует более простое решение, если это единственный сценарий, к которому вы обращаетесь, и заключается в создании вторичного значения, по которому вы фильтруете, - объединенной формы этих полей, которую вы можете запросить как одно значение.

При индексации вы должны объединить значения в одно поле с разделителем, например |, а затем запросить его как одно поле:

merged_demande_reponse:("oui|non" OR "oui|")

Это поле больше не обрабатывается. Преимущество этого решения состоит в том, что каждый документ хранится в простом виде, и все функции работают "из коробки" без необходимости каждый раз думать о дочерних документах.

Другое решение состоит в том, чтобы индексировать каждую комбинацию как отдельный документ (что дочерние документы делают в фоновом режиме). Каждая комбинация значений становится отдельным документом с общим идентификатором:

{
  "id": <generated id>,
  "docid": "doc1",
  "type.id": "1",
  "type.demande": "non"
  "type.reponse": "oui"
  "type.traitement": "oui"
},
{
  "id": <generated id>,
  "docid": "doc1",
  "type.id": "2",
  "type.demande": "non"
  "type.reponse": "oui"
  "type.traitement": "oui"
},
... etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...