向 ElasticSearch 查询添加过滤器
Add Filter To ElasticSearch Query
我正在尝试创建一个查询,用户可以在其中搜索品牌字段等于某个字符串的 ES 文档。这是我目前可以使用但没有过滤的查询。我在 Rails 上使用 elasticsearch-rails 和 Ruby。
@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}
我不确定为什么这不起作用。如有任何帮助,我们将不胜感激!
我不确定 Elasticsearch-rails with Ruby on Rails 如何解析查询。但我在 Kibana 中尝试了以下查询:
GET test/testt/_search
{
"query": {
"filter": {
"term": {
"brand": "NordicTrack"
}
}
}
}
这与您查询中给您错误的部分有些相似,我也遇到了同样的错误。
但是当我用 bool query 包装 term query 时,它 returns 想要的结果。查询:
GET test/_search
{
"query": {
"bool": {
"filter": {
"term": {
"brand": "NordicTrack"
}
}
}
}
}
试一试。
尝试使用这样的过滤查询:
query: {
function_score: {
query: {
filtered: {
query: {
multi_match: {
fields: ['brand^5', '_all'],
query: "#{query}",
fuzziness: "AUTO"
}
},
filter: {
term: {
brand: "NordicTrack"
}
}
}
},
field_value_factor:{
field: "popularity",
modifier: "log1p"
}
}
}
我正在尝试创建一个查询,用户可以在其中搜索品牌字段等于某个字符串的 ES 文档。这是我目前可以使用但没有过滤的查询。我在 Rails 上使用 elasticsearch-rails 和 Ruby。
@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}
我不确定为什么这不起作用。如有任何帮助,我们将不胜感激!
我不确定 Elasticsearch-rails with Ruby on Rails 如何解析查询。但我在 Kibana 中尝试了以下查询:
GET test/testt/_search
{
"query": {
"filter": {
"term": {
"brand": "NordicTrack"
}
}
}
}
这与您查询中给您错误的部分有些相似,我也遇到了同样的错误。 但是当我用 bool query 包装 term query 时,它 returns 想要的结果。查询:
GET test/_search
{
"query": {
"bool": {
"filter": {
"term": {
"brand": "NordicTrack"
}
}
}
}
}
试一试。
尝试使用这样的过滤查询:
query: {
function_score: {
query: {
filtered: {
query: {
multi_match: {
fields: ['brand^5', '_all'],
query: "#{query}",
fuzziness: "AUTO"
}
},
filter: {
term: {
brand: "NordicTrack"
}
}
}
},
field_value_factor:{
field: "popularity",
modifier: "log1p"
}
}
}