[英]What are the parameters for the search method of the Tire gem?
我需要使用Tire来运行搜索,并将我的查询专门定义为参数,但是我不确定如何继续。
search = {
query: {
function_score: {
query: { match_all: {} },
# filters is an array previously built
functions: filters,
score_mode: "total"
}
}
}
Program.tire.search(load: true, size: 50, search)
我收到以下错误: /Users/app/models/program_match.rb:122: syntax error, unexpected ')', expecting tASSOC
: /Users/app/models/program_match.rb:122: syntax error, unexpected ')', expecting tASSOC
,这使我相信我只是在调用search
之前错过了一个关键词。
任何帮助将不胜感激!
您可能只需要做:
Program.tire.search({load: true, size: 50}.merge(search))
编辑
实际上,查看search
源( https://github.com/karmi/retire/blob/master/lib/tire/model/search.rb ),看起来您需要这样做:
Program.tire.search(search, {load: true, size: 50})
search
需要两个参数(查询,选项)或一个参数(用于选项)和一个块(用于查询)。 Ruby感到困惑,因为您已经启动了一个哈希( load: true ...
),然后仅放置了一个新哈希(您的search
哈希),它被视为哈希键(无值)。
另外,如果您刚开始使用Tire,我建议您检查一下elasticsearch-rails ,据作者说,它正在替代Tire。
最近,我将Tire项目转换为elasticsearch-rails,发现它可以完成Tire所能做的一切,尽管它不提供查询DSL(似乎您无论如何都没有使用它,因此不会造成任何损失)。
编辑2
您可以执行一个简单的match_all
查询,例如:
Program.tire.search(load: true, size: 50) { query { all } }
您可以通过执行以下操作来获得类似的结果:
Program.tire.search('*', load: true, size: 50)
正如我在下面的评论中指出的那样,作为search
的第一个参数的search
将始终包装在query_string
查询中。
做您最初要求的最好的方法可能是:
Tire.search(Video.tire.index_name, query: {
function_score: {
query: { match_all: {} },
functions: filters,
score_mode: "total"
}
}).results
我刚刚在本地项目上测试了类似的function_score
查询,并确认它产生了预期的查询。
编辑3
我以前从未使用过load
选项,但看起来您可以做到:
Tire.search(Video.tire.index_name, payload: {
query: {
function_score: {
query: { match_all: {} },
functions: filters,
score_mode: "total"
}
}
}, load: true).results
请注意,您必须将查询包装为payload
的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.