Как индексировать и найти числа с Lucene.NET?

Полагаю, вы ожидаете, что этот запрос не вернет совпадающих документов, но он все равно возвращает документ, даже если значение «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] должен делать то, что вы хотите.

5
задан splattne 16 November 2008 в 17:11
поделиться

1 ответ

При создании Документа Lucene Вы добираетесь для выбора различных опций индексации для каждого поля. Для полей Вы не хотите маркируемый, необходимо выбрать Поле. Индекс. Опция UN_TOKENIZED. Это сохранит Ваши номера телефона и номера продуктов в такте.

Я также советовал бы использовать StandardAnalyzer, поскольку не разделяет числа как SimpleAnalyzer.

Также важно, чтобы Вы использовали тот же анализатор и для индексации и для поиска, для получения последовательных результатов.

13
ответ дан 18 December 2019 в 14:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: