Как включить частичное сопоставление с солнечным пятном для рельсов?

Я только что настроил sunspot_rails, и он работает хорошо, за исключением одного момента. После того, как я сделал 3 записи, как показано ниже

  1. имя = Джон
  2. имя=Джон2
  3. имя=Джон3

когда я ищу по ключевому слову «Джон», появляется только 1-я запись. похоже на полное совпадение. Я бы хотел, чтобы все они отображались в результатах поиска.

Это должно происходить по умолчанию? или я что-то не так настроил??


person MKK    schedule 23.06.2012    source источник
comment
возможный дубликат stackoverflow.com/questions/10601867/   -  person x1a4    schedule 23.06.2012
comment
Не могли бы вы опубликовать блок searchable из вашей модели и блок Model.search в вашем контроллере?   -  person aNoble    schedule 23.06.2012
comment
х1а4, спасибо! Я пробовал это, но после добавления тех строк, которые они просили сделать, результат не появляется. очень странно :(   -  person MKK    schedule 23.06.2012


Ответы (2)


Если вы хотите вернуть подстроки в полнотекстовом поиске, вы можете посмотреть в

https://github.com/sunspot/sunspot/wiki/Matching-substrings-in-fulltext-search

Также вы можете добавить файл sunspot_solr.rb для разбиения результатов на страницы в myapp/config/initializers/ с помощью:

Sunspot.config.pagination.default_per_page = 100

вернуть 100 результатов для этого случая.

Добавлен:

Ваш schema.xml файл основан в yourappfolder/solr/conf

Также вы можете добавить <filter class="solr.NGramFilterFactory"/> для соответствия произвольным подстрокам.

Это моя конкретная конфигурация для schema.xml:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
<fieldtype class="solr.TextField" name="text_pre" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
  </analyzer>
</fieldtype>

Для меня он отлично работает с полными строками и подстроками для всех ключевых слов. Не забудьте перезапустить сервер и переиндексировать модели, чтобы изменения вступили в силу.

С уважением!

person hyperrjas    schedule 23.06.2012
comment
ааа спасибо. После того, как я добавил Sunspot.config.pagination.default_per_page = 100 , казалось, что все прошло успешно, но возникла другая проблема :( теперь мне удалось выполнить поиск подстроки по ключевому слову, которое является английским языком, но не многобайтовым, как японский. Это было отлично работает до добавления строки. - person MKK; 23.06.2012
comment
Если вы будете следовать этой инструкции, результатом поиска могут быть только те записи, начальные символы которых соответствуют ключевому слову. Не записи, содержащие ключевое слово в середине строк. Так сложно. - person MKK; 23.06.2012
comment
Спасибо. если этот ответ действителен, вы должны принять этот ответ, пожалуйста. Для специальных символов вы посмотрите github.com/sunspot/sunspot/wiki/ - person hyperrjas; 23.06.2012
comment
Я добавил исправление для произвольных подстрок. Спасибо! - person hyperrjas; 23.06.2012
comment
если поле записи начинается с ключевого слова поиска, оно отображается как результат поиска. Но если искомое ключевое слово содержится в середине или в конце строки, записи не будут найдены. - person MKK; 23.06.2012
comment
В ответ я добавил свою конфигурацию schema.xml. Для меня это отлично работает с этой конфигурацией со строкой, подстроками... и т.д. - person hyperrjas; 23.06.2012
comment
Спасибо!!! ваша схема сработала идеально, как я и хотел!!! теперь, что я могу сделать, чтобы включить поиск многобайтового языка??? - person MKK; 23.06.2012
comment
Пожалуйста, примите этот ответ, и вы должны задать другой вопрос с многобайтовой проблемой. Спасибо! - person hyperrjas; 23.06.2012
comment
давайте продолжим это обсуждение в чате - person MKK; 23.06.2012
comment
Вау, было бы неплохо, если бы драгоценный камень встроил что-то для этого... тьфу. - person Abram; 27.01.2013
comment
Спасибо .. вы сделали это. Вы исправили это. ТЫ ДА ЧЕЛОВЕК! - person Abram; 13.05.2013

Спасибо!!!

блок от контроллера девочек(girls_controller.rb)

def index

  @search = Girl.search do  
    fulltext params[:search]  
  end  
  @girls = @search.results 

#    @girls = Girl.all
#
#    respond_to do |format|
#      format.html # index.html.erb
#      format.json { render json: @girls }
#    end
end

блок от Девушка модель(girl.rb)

searchable do 
  text :name_en, :name_es, name_ja
end
person MKK    schedule 23.06.2012