Как заставить Солр токенизировать слеш

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

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /

Другие вопросы по тегам