gpt4 book ai didi

ruby-on-rails - 将过滤器添加到ElasticSearch查询

转载 作者:行者123 更新时间:2023-12-02 22:57:48 26 4
gpt4 key购买 nike

我正在尝试创建一个查询,用户可以在该查询中搜索品牌字段等于某个字符串的ES文档。这是我目前可以使用但没有过滤的查询。我在Ruby on Rails中使用elasticsearch-rails。

@products = Product.search(
query:{
function_score:{
query: {
multi_match: {
fields: ['brand^5', '_all'],
query: "#{query}",
fuzziness: "AUTO"
}
},
field_value_factor:{
field: "popularity",
modifier: "log1p"
}
}
}).page(page).per(25)

我已将静态名称分配给过滤器以进行测试。在这种情况下,用户应该会看到其商标为“NordicTrack”的搜索关键字的结果。
query:{
function_score:{
query: {
multi_match: {
fields: ['brand^5', '_all'],
query: "#{query}",
fuzziness: "AUTO"
}
},
filter: {
term: {"brand":"NordicTrack"}
},
field_value_factor:{
field: "popularity",
modifier: "log1p"
}
}
}
).page(page).per(25)

此查询给我以下错误:
[400] {"error":{"root_cause":[{"type":"parsing_exception","reason":"no [query] registered for [filter]","line":1,"col":139}],"type":"parsing_exception","reason":"no [query] registered for [filter]","line":1,"col":139},"status":400}

我不确定为什么这行不通。任何帮助,将不胜感激!

最佳答案

我不确定Ruby on Rails的Elasticsearch-rails如何解析查询。但是我在Kibana中尝试了以下查询:

GET test/testt/_search
{
"query": {
"filter": {
"term": {
"brand": "NordicTrack"
}
}
}
}

这有点类似于查询中给您的错误,我也遇到了同样的错误。
但是,当我将术语查询与 bool(boolean) 查询包装在一起时,它将返回所需的结果。查询:
GET test/_search
{
"query": {
"bool": {
"filter": {
"term": {
"brand": "NordicTrack"
}
}
}
}
}

试一试。

关于ruby-on-rails - 将过滤器添加到ElasticSearch查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46120009/

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