Во-первых, позвольте мне сказать, что я очень плохо знаком с JSR-170 и Jackrabbit / Lucene в целом.
У меня следующий запрос XPath:
//*[@sling:resourceType="users/user-profile" and jcr:contains(*/*/*,'sophie\-a')] order by @jcr:score descending
У меня есть пользователь по имени Софи-Аллен и пользователь по имени Софи-Энн. Поиск с использованием вышеуказанного запроса возвращает ноль результатов, тогда как поиск только по «sophie» возвращает обоих пользователей. Я понимаю, что дефис означает исключение в JSR-170, но я избежал его (как вы можете видеть выше).
Почему этот запрос не возвращает обоих пользователей?
Еще одна странная вещь, когда я использую звездочки (все дефисы экранируются при выполнении):
- Поиск
'sophie-allen'
возвращает запись Софи-Аллен.
- Поиск
'soph*'
возвращает и Софи-Аллен, и Софи-Энн.
- Поиск
'sophie-a*
ничего не возвращает.
- Поиск
'sophie-allen*'
ничего не возвращает.
Я понимаю, что с jcr: содержит, технически вам не нужно использовать звездочки, но, глядя на вышеупомянутое поведение, кажется, что он имеет какой-то эффект.
Есть ли что-то еще, что мне не хватает в отношении дефисов и звездочек в запросах XPath и поиске JCR? Я погуглил все, что мог придумать, и прочитал спецификацию, но не могу найти ничего, что отвечало бы на мой вопрос.
Заранее спасибо.
Edit:
Похоже, что «запрос фразы» не работает с jcr: Содержит (больше?), Поскольку Lucene Analyzer по умолчанию токенизирует дефис, что означает, что он разбивает 'sophie-allen' на sophie и allen.
Редактировать 2:
Я попытался использовать собственный анализатор и токенизатор, как это было предложено кем-то из списка пользователей Jackrabbit, но это тоже не помогло, Lucene все еще использует дефис и пропускает результаты, которые я хочу.