act_as_solr возвращает все строки в базе данных при использовании модели в качестве поискового запроса

В нашем приложении для поиска мы используем actions_as_solr. Кажется, все идет гладко, за исключением того факта, что использование имени модели в качестве поискового запроса возвращает каждую отдельную строку в таблице.

Например, допустим, у нас есть таблица пользователей. Мы указываем в нашей модели actions_as_solr для поиска в полях имя, фамилия и дескриптор actions_as_solr: fields => [: handle,: lname,: fname]. Когда вы используете «пользователь» в качестве поискового запроса, он возвращает каждого отдельного пользователя в системе или, в результате, каждую строку в базе данных.

Кто-нибудь еще сталкивался с этим?


person Community    schedule 16.01.2009    source источник
comment
Это действительно интересно. Вы смотрели сгенерированные документы, которые отправляются в solr, чтобы увидеть, куда включается это поле?   -  person MattMcKnight    schedule 02.12.2009


Ответы (1)


Это связано с тем, как actions_as_solr строит запрос в parser_methods.rb

Вам нужно будет внести несколько изменений в parser_methods.rb.

Изменять

models =  "AND #{solr_configuration[:type_field]}:#self.name}" 

to

models =  "#{solr_configuration[:type_field]}:#self.name}" 

Тогда не включайте в запрос строку построенных моделей.

query = "(#{query.gsub(/ *: */,"_t:")}) #{models}"

Измените это на просто

query = "(#{query.gsub(/ *: */,"_t:")})"

Теперь вам нужно будет принудительно включить часть этого запроса, содержащую модели, в поиск в SOLR.

Я сделал это с .....

query_options[:fq_model] = models

Перешел на standard.rb

Обязательно добавили

:fq_model

в массив VALID_PARAMS.

Добавлены следующие

if @params[:fq_model]
 hash["fq"] = @params[:fq_model]
end

Я добавил несколько дополнительных случаев, но они вам не понадобятся, если вы не хотите сделать: fq опцией для find_by_solr.

После того, как у меня все это было на месте, я теперь могу искать название модели и получаю гораздо меньший набор результатов, чем ожидал.

Скорее всего, для работы multi_solr_search также потребуются обновления, поскольку оказывается, что часть запроса type_t жестко закодирована в этом методе.

Я понял большую часть этого, когда столкнулся с некоторыми проблемами, связанными с этим вопросом. Выделение в Solr 1.4 - requireFieldMatch

person Mark Redding    schedule 01.04.2010