2016-10-13 4 views
0

У меня есть составной идентификатор, который представляет собой строку, состоящую из арендатора и идентификатора объекта, разделенного знаком «!». (например, сказать «арендатор! id»).Spring Data Solr: извлечение документа при использовании явного составного идентификатора в качестве ключа маршрутизации

Я отправляю этот составной идентификатор в качестве входа в метод запроса findOne (ID compositeId), но во время выполнения BasePredicateProcessor в классе QueryParserBase конвертирует «!» на "\!", который разбивает ключ маршрутизации, отправленный на Solr. Solr не может получить объект, используя метод crudrepository.findOne().

Есть ли способ избежать преобразования "!" на «\!», или есть альтернативный способ добиться того же самого?

ответ

0

Это не общий ответ, а предложения о возможных подходах.

Я не знаю специфики, но вы можете изменить то, что используется, чтобы разобрать входящий запрос на что-то еще (возможно, solrconfig.xml). Я не знаю, какой из доступных «процессоров» будет делать то, что вы хотите, - или если один из них доступен даже для определенного типа поведения, так как я предполагаю, что вам все равно понадобятся другие «преимущества», предоставляемые BasePredicateProcessor. См. Следующую возможность ...

Альтернативой будет расширение BasePredicateProcessor и использование расширенного класса (опять же, вероятно, solrconfig.xml). Ваш модифицированный код оставил бы «!» в одиночестве. Этот второй вариант потребует кодирования.

Третья опция заключается в том, чтобы увидеть, есть ли «escape-последовательность», которую вы могли бы использовать для изменения строки запроса, прежде чем отправлять ее в Solr ... Что-то вроде «escape escape». Я не знаю, возможно ли это. Однако стоит исследовать.

Некоторые возможно полезные ссылки для # 3

http://lucene.472066.n3.nabble.com/How-do-you-query-for-a-string-containing-a-colon-td481672.html

https://lucene.apache.org/core/2_9_4/queryparsersyntax.html

От второго звена:

Lucene поддерживает экранирование специальных символов, которые являются частью синтаксиса запросов. Список специальных символов являются

    • & & || !() {} []^"~ *: \

Чтобы избежать эти символы, используйте \ перед символом Например, для поиска (1 + 1):. 2 используйте запрос:

\ (1 \ +1 \): 2

 Смежные вопросы

  • Нет связанных вопросов^_^