Я хочу искать документы в MarkLogic.MarkLogic - Поиск через Max/Min Filter
Мои документы выглядеть так:
<product xmlns="myns/products">
<id>3114</id>
<materialNo xml:lang="en">1.1160</materialNo>
<steelName xml:lang="en">SWRCH24K</steelName>
<name xml:lang="en">wire, wire rod for cold heading</name>
<chemicalProperties>
<chemicalProperty>
<element>c</element>
<min>0.1900</min>
<max>0.2500</max>
</chemicalProperty>
<chemicalProperty>
<element>si</element>
<min>0.1000</min>
<max>0.3500</max>
</chemicalProperty>
<chemicalProperty>
<element>mn</element>
<min>1.3500</min>
<max>1.6500</max>
</chemicalProperty>
<chemicalProperty>
<element>p</element>
<max>0.0300</max>
</chemicalProperty>
</chemicalProperties>
</product>
Так я хочу искать через макс/мин значений химических свойств. Для этого я использую этот поиск XQUERY (простой пример):
cts:search(/, cts:and-query(
(cts:collection-query("test"),
cts:element-value-query(
fn:QName("myns/products", "name"),
"wire, wire rod for cold heading"),
cts:element-query(
fn:QName("myns/products", "chemicalProperty"),
cts:and-query(
(cts:element-value-query(
fn:QName("myns/products", "element"), "c"),
cts:or-query(
(cts:element-range-query(
fn:QName("myns/products", "max"), "<=", 0.2),
cts:and-not-query(
cts:element-range-query(
fn:QName("myns/products", "min"), "<=", 0.2),
cts:element-value-query(
fn:QName("myns/products", "max"), "*")))),
cts:or-query(
(cts:element-range-query(
fn:QName("myns/products", "min"), ">=", 0.1),
cts:and-not-query(
cts:element-range-query(
fn:QName("myns/products", "max"), ">=", 0.1),
cts:element-value-query(
fn:QName("myns/products", "min"), "*"))))))))))
Проблема заключается в том, что запрос выше будет возвращать образец документа. Подпрограммы (и-not) проверяются, существует ли max/min. В некоторых случаях может быть только минимальное или максимальное значение.
Но этот документ за пределами ?!
В моей базе данных есть индексы диапазона элементов по мин. И макс. Все остальные настройки являются значениями по умолчанию.
В чем проблема? Какие-либо предложения.
UPDATE
Ок, спасибо за предложения, но нет. Включение позиции значения не решает проблему. Однако обходной путь заключается в удалении «и-не-запроса» и заменить его «и-запрос» и добавить новые атрибуты документов:
<chemicalProperty hasMin="0" hasMax="1">...
индексирования и запросы этих атрибутов работает и возвращает правильное Результаты.
Если у вас есть следующий вопрос, пожалуйста, разместите его как отдельный вопрос SO. Если этот вопрос уместен, вы можете связать его с новым. – wst