rails sunspot solr按关键词搜索

时间:2013-09-16 03:50:14

标签: ruby-on-rails ruby-on-rails-3 sunspot sunspot-rails sunspot-solr

我正在搜索2天,使用sunspot solr查询关键字搜索。我无法理解

我的预期输出是

如果我搜索laptops in US,它应该搜索笔记本电脑和我们

但是下面的代码只搜索笔记本电脑而不是其他字样。我怎样才能实现它。

我的全文很有效

我已编辑schema.xml

<fieldType name="text" class="solr.TextField" omitNorms="false">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15"/>
      </analyzer>

      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

我的模型包含

searchable do
        text :title,:description,stored: true
        time :updated_at
        text :product do
            product.name if product
        end
        text :product_model do
            product_model.name if product_model
        end
    end

我的控制器是

@search = Post.search do
      fulltext params[:search] do
        query_phrase_slop 1
      end
    end

修改1

我在一列中有两行pizza而在其他列中有post行。如果我搜索pizza,则如果我搜索post则返回5个结果,则返回1个结果。最后,如果我搜索pizza post,则结果为无。但预期的产出是获得6个结果。

我将fulltext params[:search] do更改为keywords params[:search] do

修改2

def index
    @search = Post.search do
      fulltext params[:search].split(' ') do
        phrase_slop 1
      end
    end
    @posts = @search.results
end

1 个答案:

答案 0 :(得分:3)

最后,我们发现了什么是错的(评论),但我会把它作为一个答案,所以问题可能会被解决。

您应该将minimum_match添加到search块中,即:

@search = Post.search do
      fulltext params[:search] do
        query_phrase_slop 1
        minimum_match 1
      end
    end

如果未提供该选项,则默认为“所有字词匹配”(source)。