Как заставить Солр токенизировать слеш
Пользовательские идентификаторы на моем Rails
объекты включают косые черты. Например, идентификатор может выглядеть так ncsu.edu/123456789
, Когда я пытаюсь запросить Solr для этого идентификатора, я получаю любой результат, который имеет ncsu.edu
в этом. Метаданные для объекта Rails приведены ниже:
class IntellectualObjectMetadata < ActiveFedora::RdfxmlRDFDatastream
map_predicates do |map|
map.intellectual_object_identifier(in: RDF::DC, to: 'identifier') do |index|
index.as :stored_searchable
end
end
end
И я спрашиваю так:
IntellectualObject.where(desc_metadata__intellectual_object_identifier_tesim: params[:intellectual_object_identifier]).first
Мне было интересно, есть ли у кого-нибудь советы о том, как маркировать запрос Solr, чтобы он возвращал только объекты, которые соответствуют целому идентификатору, а не частичным. Благодарю.
1 ответ
Исходя из этого ответа, вы можете избежать обратного слеша при поиске, так что в вашем случае:
IntellectualObject.where(desc_metadata__intellectual_object_identifier_tesim: params[:intellectual_object_identifier].gsub("/","\/")).first
Обратите внимание gsub
подчинить ваш /
за \/
РЕДАКТИРОВАТЬ: как вы можете видеть в документации здесь:
В Solr 4.0 добавлена поддержка регулярных выражений, что означает, что "/" теперь является специальным символом и должен быть экранирован при поиске буквального слеша.
так что если у вас есть токен как aaa/bbb
вы ищете это с aaa\/bbb
РЕДАКТИРОВАТЬ #2: из документов Lucene, которые связаны с выше.
Lucene поддерживает экранирование специальных символов, которые являются частью синтаксиса запроса. Текущий список специальных символов
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /