Полагаю, вы ожидаете, что этот запрос не вернет совпадающих документов, но он все равно возвращает документ, даже если значение «permissions» не соответствует ожидаемому.
Это объясняется выражением запроса FILTER:
u.gacl[* filter contains(CURRENT.permissions,'c') and CURRENT.principal == 'users/12345']
Это выражение использует оператор звезды, который всегда создает массив в качестве результата. Поскольку никакие элементы массива не соответствуют фильтру, используемому для отдельных элементов, результатом всего выражения является просто пустой массив:
[]
Таким образом, условие FILTER запроса преобразуется в
FILTER []
И []
равно true
при преобразовании в boolean.filter (
Таким образом, при использовании этого условия FILTER каждый документ будет совпадать.
Изменение условия на
FILTER LENGTH(u.gacl[* filter contains(CURRENT.permissions,'c') and CURRENT.principal == 'users/12345']) > 0
[ 1113] должен делать то, что вы хотите.
При создании Документа Lucene Вы добираетесь для выбора различных опций индексации для каждого поля. Для полей Вы не хотите маркируемый, необходимо выбрать Поле. Индекс. Опция UN_TOKENIZED. Это сохранит Ваши номера телефона и номера продуктов в такте.
Я также советовал бы использовать StandardAnalyzer, поскольку не разделяет числа как SimpleAnalyzer.
Также важно, чтобы Вы использовали тот же анализатор и для индексации и для поиска, для получения последовательных результатов.