Можно определить атрибуты дочерних тегов в запросе и использовать их в поиске, агрегация, заказ и т.д.
Если вы хотите, чтобы искать < имя > с определенным значением атрибута, а затем просто указать это в запросе:
<query><name>Bill<lang>en</lang></name></query>
Это будет поиск документов, в которых оба условия согласованы. Так что, если ваша база данных содержит, например, документы (я добавил документ с идентификатором = 3):
<db>
<document>
<id>1</id>
<name lang="en">John</name>
<name lang="ru">Джон</name>
</document>
<document>
<id>2</id>
<name lang="en">Bill</name>
<name lang="ru">Билл</name>
</document>
<document>
<id>3</id>
<name lang="it">Bill</name>
<name lang="ru">Билл</name>
</document>
</db>
затем запрос упоминалось выше (с определенными атрибутами) возвращает документ с идентификатором = 2.
Но если вы будете искать по:
<query><name>Bill</name></query>
, то вы получите два документа с идентификатором = 2 и ид = 3.
Будьте осторожны, если есть повторяющиеся теги, необходимо использовать тег colocation путем определения правила «colocate = yes» в конфигурации политики для соответствующего тега (в вашем случае - < имя >) и с помощью «@ оператора в запросе.
При добавлении документа в базу данных:
<document>
<id>4</id>
<name lang="en">Steve</name>
<name lang="ru">John</name>
</document>
И будет пытаться вернуть документы, где оба условия значения совпадают внутри одного повторяющегося тега, то запрос:
<query><name>John<lang>en</lang></name></query>
будет возвращать неверный результат - документы с id = 1 и id = 4.
Но, определяя "colocate = да" для < имени > и с помощью "@" оператора:
<query> @ <name>John<lang>en</lang></name> @ </query>
вы получите правильный один - с идентификатором = 1.
Это не работает. Добавьте еще один документ с Steve и John . Если вы сделаете поиск по John ru вы получите первый документ и тот, который я предложил, хотя lang для моего Джона является «ru». –
Endijs
@Endijs Вы правы, если в одном документе есть повторяющиеся теги, это не сработает, потому что этот запрос ищет совпадения во всех тегах документа отдельно, а не в «связанных» тегах. Для этого вы должны использовать функцию тегов colocation. Я просто добавил этот пример в ответ (спасибо за эту ссылку). – Marija
Ах. Я также пробовал подход «@», и он не работал раньше. Теперь, после добавления соответствующего правила политики, он начал работать. :) – Endijs