Откат к другому полю с нулевым - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть таблица с данными, которые можно редактировать, body и body_edited. Когда содержимое добавляется в таблицу, поле body всегда присутствует, а body_edited равно нулю. body_edited предназначено для небольшой части контента, который может быть изменен в будущем и использоваться для публичного контента при сохранении оригинала.

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

Поле body будет сохранено по старым причинам. Создание третьего поля при импорте данных из SQL было предложено в качестве опции, но оно значительно увеличит объем пространства, необходимого для хранения.

Есть ли способ добиться этого с помощью запроса по двум полям?

1 Ответ

0 голосов
/ 11 сентября 2018

Вы можете достичь этого, используя пункты should и exists. Предположим, у вас есть два следующих документа:

// Document 1
{
  "body": "quick brown fox",
  "body_edited": null
}

// Document 2
{
  "body": "quick brown fox",
  "body_edited": "jumps over the lazy dog"
}

Вот пример поискового запроса для терминов «коричневая лиса»:

"query": {
  "bool": {
    "should": [
      {
        "match": {
          "body_edited": "brown fox"
        }
      },
      {
        "bool": {
          "must": {
            "match": {
              "body": "brown fox"
            }
          },
          "must_not": {
            "exists": {
              "field": "body_edited"
            }
          }
        }
      }
    ]
  }
}

Этот запрос вернет только первый документ, несмотря на то, что поле body в документе 2 также соответствует нашим критериям поиска.

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