NGramFilterFactory和Phrase

时间:2013-12-29 14:40:47

标签: sunspot sunspot-rails sunspot-solr

我在Schema.xml中使用NGramFilterFactory。但是当搜索(正确的)短语时,我没有得到任何结果。有没有办法解决这个问题?

一本书有一个标题:中等速度的多重奇数生产
我在搜索时得到了一个结果:

多奇重重

但在搜索短语时:

“多奇重重”

我没有结果。

Schema.xml的

<fieldType name="ngram" class="solr.TextField" omitNorms="false">
 <analyzer type="index">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>                     
  <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="50"/>
 </analyzer>
 <analyzer type="query">
   <tokenizer class="solr.WhitespaceTokenizerFactory"/>
   <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
   <filter class="solr.LowerCaseFilterFactory"/>
 </analyzer>
</fieldType>

...

<dynamicField name="*_ngram" stored="false" type="ngram" multiValued="true" indexed="true"/>

Book.rb

class Book < ActiveRecord::Base
  attr_accessible :authors, :title

  searchable do    
    text :title, :as => :ngram
  end    
end

BooksController.rb

  def search
    @books = Sunspot.search([Book]) do
      keywords params[:query]
    end.results

    respond_to do |format|
      format.html { render :action => "index" }
      format.xml  { render :xml => @books }
    end
  end

0 个答案:

没有答案