gpt4 book ai didi

ruby-on-rails - 轮胎 gem 的搜索方法的参数是什么?

转载 作者:行者123 更新时间:2023-12-03 00:43:23 25 4
gpt4 key购买 nike

我需要使用 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这让我相信我在调用 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需要两个参数(查询,选项)或一个参数(用于选项)和一个 block (用于查询)。 Ruby 会感到困惑,因为您已经开始了一个散列( load: true ... ),然后只是放置了一个新的散列(您的 search 散列),它认为它是一个散列键(没有值)。

另外,如果您刚开始使用轮胎,我建议您查看 elasticsearch-rails ,据作者说,它正在取代轮胎。

我最近将一个 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 的第一个参数将始终包裹在 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 的值。 .

关于ruby-on-rails - 轮胎 gem 的搜索方法的参数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24264438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com