0

我正在尝试在 solr 中执行字母搜索,但直到此刻我才能做到这一点

我想按字母搜索,我的搜索只需要检索以指定字母开头的单词,而不是如果单词在其他任何地方包含该字母

例如:如果我点击字母“a”,它必须检索“ant”、“animal”等

不是“香蕉”、“骆驼”

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

@articles = Sunspot.search(Article) 做关键字(params[:q]) 分页(:page => params[:page], :per_page => 20) order_by :relevance, :desc order_by :article_order, :asc end

任何人都可以帮忙吗?提前致谢

4

1 回答 1

0

这在一定程度上取决于您的模型如何配置为索引。

EdgeNgramFilterFactory

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

EdgeNGramFilterFactory 将每个术语转换为一组 NGram。“Dog”扩展为“d”、“do”和“dog”。

这种方法可以让您使用字母开头匹配文本字段中存在的任何术语。它对于扩展查询的匹配很有用,但是如果您将其用于一种首字母过滤,那么它可能不是您想要的。

'开始于' 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
于 2011-07-07T00:13:31.323 回答