当前位置: 首页 > 面试题库 >

在Rails 4.1中使用Searchkick gem在Elasticsearch中设置构面

廖绍辉
2023-03-14
问题内容

我希望用户能够轻松找到系列,因此希望设置构面。我已经按照seachkick的指示进行了,并且一切正常,但是当我设置Facets时,得到了以下回报。我希望它像他们的文档一样。希望有人能帮忙。

我在myapp.com/movies中得到了

{
  "name"=> {
    "_type"=> "terms",
    "missing"=> 0,
    "total"=> 1,
    "other"=> 0,
    "terms"=> [
      {
        "term"=> "Bloop",
        "count"=> 1
      }
    ]
  },
  "imdb"=> {
    "_type"=> "terms",
    "missing"=> 0,
    "total"=> 1,
    "other"=> 0,
    "terms"=> [
      {
        "term" => "http://www.bloop.com",
        "count" => 1
      }
    ]
  }
}
#app/views/movies/index.html.erb
<%= p @series.facets %>
#app/controllers/movies_controller.rb
def index
  query = params[:query].presence || "*"
  @movies = Movie.search(query, page: params[:page],
                                suggest: true,
                                per_page: 20,
                                facets: [:name, :imdb])
end
#db/schema.rb
create_table "movies", force: true do |t|
  t.string   "name"
  t.text     "description"
  t.string   "imdb"
  t.string   "year"
  t.datetime "created_at"
  t.datetime "updated_at"
end

问题答案:

通过执行以下操作,终于使它正常工作。不知道这是否是最好的方法,但是它有效!希望对您有所帮助,如果您有任何改进或建议,请随时告诉我。

# app/models/movie.rb
def self.facets_search(params)
  query = params[:query].presence || "*"
  conditions = {}
  conditions[:year] = params[:year] if params[:year].present?

  movies = Movie.search query, where: conditions, 
    facets: [:year], 
    smart_facets: true, page: params[:page], suggest: true, highlight: true,
    per_page: 10
  movies
end

# app/controllers/movies_controller.rb
def index
  @movies = Movie.facets_search(params)
end

# app/views/movies/index.html.erb
<% if @movies.facets["year"]["terms"].present? %>
    <div>
        <ul>
        <% @movies.facets["year"]["terms"].each do |filter| %>
          <li><%= link_to "#{filter["term"]} (#{filter["count"]})", "/movies?year=#{filter["term"]}" %></li>
        <% end %>
        </ul>
    </div>
<% end %>


 类似资料:
  • 我正在构建一个API并使用swagger测试endpoint。我有一个产品: 在这个DTO中,我想使用在我的代码中使用的Price类。价格类如下所示: 但是由于私有设置器在类中使用,我无法使用swagger设置这些值(它在这些上具有属性)。我真的很喜欢这种拥有私有设置器并使用构造函数设置值的方法,顺便说一句,这是公共的。有没有办法我可以使用swagger为类设置值,并且仍然在属性上使用私有设置器?

  • 问题内容: 我正在使用Sense(Chrome插件),并且已经成功设置了分析仪,并且可以正常工作。如果我在设置上发出GET(/ media / _settings),则返回以下内容。 我正在尝试通过执行以下操作来更新它: 关闭索引 发出此PUT命令(删除过滤器) 打开索引 但是,当设置恢复时,不会删除过滤器。创建分析器后,是否可以不对其进行更新? 问题答案: 简短答案:不可以。 更长的答案。从ES

  • 问题内容: 我正在尝试在Rails应用程序中使用Elasticsearch设置CircleCI。我认为已配置了映像,但是如何在CI中连接到该映像? 到目前为止,我已经尝试过… https://github.com/elastic/elasticsearch/issues/23866 错误信息 圈YAML配置 elasticsearch初始化器 问题答案: 来自Elastic的官方Docker映像预

  • 我试图在我的本地开发机器上安装graylog2服务器,但在elasticsearch设置中遇到了问题。 我的elasticsearch作为一项服务安装在我的dev机器上运行的流浪机器上。因此,我的elasticsearch没有安装在127.0.0.1中,而是安装在192.168.50.4(vagrant机器的ip)中,我有从vagrant机器转发的端口9200,但graylog2服务器似乎找不到它

  • (很抱歉没有直接粘贴这里的内容。StackOverflow不允许代码与文本比率过高的问题。) 作为测试,我运行了PowerShell命令 C:\users\me\downloads\curl-7.64.1-win64-mingw\bin>.\curl.exe-xput'http://127.0.0.1:31311/twitter_new/7' 我怎么才能修好这个? 更新: 我变了 我是不是误会什么

  • 我是库伯内特人。我在Minikube中配置的整个设置。我不确定它是否与其他kubernetes设置有所不同。 我已经在我的设置中创建了一个POD,一个Spring Boot应用程序正在8080端口上运行,这个服务将在20080端口上向集群公开。 我正在运行tcpDum的集群内运行另一个pod。我需要在20080上转储撞击集群的HTTP数据包。请告诉我如何从tcpDumpod访问集群接口。 我尝试了