按字母顺序搜索WebSolr Ruby on Rails

时间:2011-07-05 14:24:50

标签: ruby-on-rails search alphabetical websolr

我试图在solr中执行字母搜索,但直到现在我才能这样做

我想用字母搜索,我的搜索只需要检索在开头时以指定字母开头的单词,而不是单词在其他地方包含字母

例如: 如果我点击字母“a”,它必须回溯 “蚂蚁”,“动物”等

不 “香蕉”,“摄影”

我的控制器现在看起来像这样:

@articles = Sunspot.search(文章)做       关键字(PARAMS [:Q])       paginate(:page => params [:page],:per_page => 20)       order_by:relevant,:desc       order_by:article_order,:asc     端

有人可以帮忙吗? 提前谢谢

1 个答案:

答案 0 :(得分:0)

这取决于您的模型如何配置为索引。

EdgeNGramFilterFactory

EdgeNGramFilterFactory添加到schema.xml中的文本字段类型,或为使用NGram过滤器处理的文本字段创建新类型。

EdgeNGramFilterFactory将每个术语变成一组NGrams。 “狗”扩展为“d”,“做”和“狗”。

此方法可让您使用字母的开头匹配文本字段中出现的任何字词。它对于扩展查询的匹配很有用,但是如果你将它用于某种首字母过滤,那么它可能不是你想要的。

'以'QueryFilter

开头

如果您正在测试的值是一个简单的标量字符串值(文章标题,类别名称,作者姓名等),那么您可以将该值索引为字符串并搜索与查询过滤器的匹配。

在太阳黑子:

class Article
  searchable do
    # ...
    string :title
  end
end

@search = Sunspot.search(Article) do
  keywords(params[:q])
  paginate(:page => params[:page], :per_page => 20)
  where(:title).starting_with(params[:letter])
  order_by :relevance, :desc
  order_by :article_order, :asc
end