MarkLogic - поиск по пути к объекту JSON (без использования индекса диапазона путей)

MarkLogic: 9.0-6.2

У нас есть документ JSON, как показано ниже, в сущности клиента.

"CustomerInfo": {
  "IdInfo": {
     "CustomerId":"12345"
  }, 
  "PartyRltp": {
      "CustomerId":"45678"
  }
}

Мне нужно найти документ на основе CustomerId по определенному пути CustomerInfo.IdInfo.CustomerId

Поэтому, если я буду искать «12345», должен быть возвращен вышеуказанный документ. Но если я буду искать с "45678", вышеуказанный документ НЕ должен возвращаться.

Я создал индекс диапазона путей и использовал cts.pathRangeQuery ('/ CustomerInfo / IdInfo / CustomerId', '=', '12345'). Однако понял, что индексы диапазона путей очень дороги, поэтому ищу способ достичь без индекса диапазона путей.

Заранее спасибо!


person Bhanu    schedule 12.04.2019    source источник


Ответы (1)


Я думаю, вы ищете cts.jsonPropertyScopeQuery:

cts.jsonPropertyScopeQuery(
  'IdInfo',
  cts.jsonPropertyValueQuery(
    'CustomerId',
    '12345'
  )
)

HTH!

person grtjn    schedule 12.04.2019
comment
Имейте в виду, что этот запрос не будет работать без фильтрации :) - person Wagner Michael; 13.04.2019
comment
Хороший аргумент, но фильтрация может и не понадобиться. Включите как позиции слов, так и позиции слов в элементах, чтобы запрос области действия был точным без фильтрации. И если CustomerId никогда не содержит пробелов, интерполяций и т. Д., Вам, вероятно, вообще не понадобится фильтруемый поиск. - person grtjn; 15.04.2019
comment
Да ты прав. Я больше не тестировал это, но я думаю, вам нужно включить позиции значений элементов вместо позиций слов элементов. - person Wagner Michael; 15.04.2019
comment
Позиции слов предназначены для запроса области (это упоминается на этой странице документации), но вы, вероятно, правы в том, что, поскольку выше используется запрос значения в контексте с заданной областью, вам также необходимо включить позиции значений элементов. docs.marklogic.com/cts.plan - ваш друг .. - person grtjn; 16.04.2019