当前位置: 首页 > 知识库问答 >
问题:

如何用Tire/ElasticSearch检索等级/类别数?

高德水
2023-03-14

我试图从ElasticSearch查询中检索嵌套数据,基本上是从电影模型中获取:

title
ratings
categories

现在,我尝试了2个轮胎设置,但都只回馈电影片名,而不是评级或类别。例如。这些索引似乎只有:

curl -X POST "http://localhost:9200/movies/_search?pretty=true" -d '
 {
    "query" : { "query_string" : {"query" : "t*"} },
    "facets" : {
      "categories" : { "terms" : {"field" : "categories"} }
    }
  }
'
{
  "took" : 16,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "movies",
      "_type" : "movie",
      "_id" : "13",
      "_score" : 1.0, "_source" : {"description":null,"id":13,"title":"Tiny Plastic Men"}
    }, {
      "_index" : "movies",
      "_type" : "movie",
      "_id" : "32",
      "_score" : 1.0, "_source" : {"description":null,"id":32,"title":"The Extreme Truth"}
    }, {
      "_index" : "movies",
      "_type" : "movie",
      "_id" : "39",
      "_score" : 1.0, "_source" : {"description":null,"id":39,"title":"A Time of Day"}
    } ]
  },
  "facets" : {
    "categories" : {
      "_type" : "terms",
      "missing" : 3,
      "total" : 0,
      "other" : 0,
      "terms" : [ ]
    }
  }

这是我的电影模型:

class Movie  :categorizations
  belongs_to :user

  has_many :ratings

  mapping do
     indexes :id, type: 'integer'
     indexes :title, boost: 40
     indexes :description, analyzer: 'snowball'
     indexes :categories do
       indexes :id, type: 'integer'
       indexes :name, type: 'string', index: 'not_analyzed'
     end
     indexes :ratings do
       indexes :id, type: 'integer'
       indexes :stars, type: 'integer'
     end
   end

end

我的搜索实验的分支在这里:https://github.com/mulderp/moviedb/tree/categories

我如何使搜索工作的方面,例如体裁-->评级。

共有1个答案

邹弘
2023-03-14

您实际上并没有对类别或评级进行索引:它们在映射中,但Tire的to_indexed_json默认实现只是调用ActiveRecord提供的to_json方法。

您需要重写它以包括类别/评等信息,例如

def to_indexed_json
  to_json(:include => [:categories, :ratings])
end
 类似资料:
  • 我正在开发一个Java的应用程序,我试图遵循我公司建议的所有编码指南。为此,我安装了一些工具,如Checkstyle、PMD和findBugs,但我不是这些代码质量分析器的专家,我不知道如何配置所有的规则。特别是我不知道有没有一个规则来检查这个要求(我的公司给出的):“继承等级必须在6级或以下。长的继承树使得代码很难阅读、理解、维护和重构。大多数继承案例可以通过实现接口和使用更容易维护的组合来覆盖

  • 问题内容: 在阅读 Tyre 文档时,我的印象是您应该使用或方法,因为(我的理解是。)使用来填充。 问题是,我找到了一些同时使用两者的教程。为什么? 基本上,我的应用程序现在可以与一起使用,但是我无法弄清楚如何设置某些属性的提升值(因此,我开始查看映射的原因),我想知道同时使用这两个属性是否会产生一些冲突。 问题答案: 尽管和方法是相关的,但实际上它们有两个不同的目的。 该 方法的目的是为索引内的

  • 问题内容: 我已经设置了索引。我不时向其推送新文档。 我只想在所有文档都编入索引后回答我的查询。我怎样才能做到这一点? 问题答案: 在ES 2中,您可以在为新文档建立索引后立即调用API,但是不建议在生产环境中使用它,因为这可能会降低群集的性能。 在ES5中,您将能够使用发送索引查询,并且ES仅在准备好搜索新文档时才响应。

  • 问题内容: 我如何从Python的Elasticsearch中获得100000个寄存器?MatchAll查询仅检索10000。 问题答案: 就像已经指出的那样,我将使用Scan API来做到这一点。 您还应该阅读有关Elasticsearch python DSL中的扫描助手的信息,网址为 http://elasticsearch- py.readthedocs.io/en/master/help

  • 问题内容: 是否可以使用Tire更新elasticsearch设置?我有这个curl命令,我想自动运行。 该值可通过轮胎获得,但我不确定如何应用。 问题答案: 可能,但是很丑:) 在将来的版本中会变得更好…

  • 问题内容: 在Elasticsearch中进行等效于SQL连接的最佳方法是什么? 我有一个带有两个大表的SQL安装程序:Persons和Items。一个人可以拥有 许多 物品。人员和项目行都可以更改(即更新)。我必须运行按人员和项目方面进行筛选的搜索。 在Elasticsearch中,您似乎可以使Person成为Item的嵌套文档,然后使用。 但是:如果您随后更新一个Person,我认为您需要更新