ElasticSearch - 传递术语数组进行过滤
ElasticSearch - Pass Array of Terms to Filter
我有一个查询,我想将动态数量的术语传递给过滤器。无论如何要将其作为数组传递?我尝试了几种不同的方法,但总是以来自 elasticsearch 的格式错误的请求错误告终。我在 Rails 上使用 Ruby 和 elasticsearch-rails gem。这是我的查询:
@products = Product.search(
query:{
function_score:{
query:{
bool:{
must:{
multi_match:{
fields: ['brand^5', '_all'],
query: "#{query}",
fuzziness: "AUTO"
}
},
filter:{
bool:{
must:[
{term: {"brand":"NordicTrack"}},
{term: {"product_type":"Treadmill"}}
]
}
}
}
},
field_value_factor:{
field: "popularity",
modifier: "log1p"
}
}
}).page(page).per(25)
我想像这样传递一个数组:
array = ['{term: {"brand":"NordicTrack"}}', {term: {"product_type":"Treadmill"}}]
进入"must"这样的语句:
@products = Product.search(
query:{
function_score:{
query:{
bool:{
must:{
multi_match:{
fields: ['brand^5', '_all'],
query: "#{query}",
fuzziness: "AUTO"
}
},
filter:{
bool:{
must: array
}
}
}
},
field_value_factor:{
field: "popularity",
modifier: "log1p"
}
}
}).page(page).per(25)
但是,这会导致 ES 出现格式错误的请求错误。
确保您的数组元素不是字符串。您的示例显示:
array = ['{term: {"brand":"NordicTrack"}}', {term: {"product_type":"Treadmill"}}]
应该是:
array = [{term: {"brand":"NordicTrack"}}, {term: {"product_type":"Treadmill"}}]
如果您在 ruby 中构建数组,它应该如下所示:
array = []
array.push term: {"brand":"NordicTrack"}
array.push term: {"product_type":"Treadmill"}
我有一个查询,我想将动态数量的术语传递给过滤器。无论如何要将其作为数组传递?我尝试了几种不同的方法,但总是以来自 elasticsearch 的格式错误的请求错误告终。我在 Rails 上使用 Ruby 和 elasticsearch-rails gem。这是我的查询:
@products = Product.search(
query:{
function_score:{
query:{
bool:{
must:{
multi_match:{
fields: ['brand^5', '_all'],
query: "#{query}",
fuzziness: "AUTO"
}
},
filter:{
bool:{
must:[
{term: {"brand":"NordicTrack"}},
{term: {"product_type":"Treadmill"}}
]
}
}
}
},
field_value_factor:{
field: "popularity",
modifier: "log1p"
}
}
}).page(page).per(25)
我想像这样传递一个数组:
array = ['{term: {"brand":"NordicTrack"}}', {term: {"product_type":"Treadmill"}}]
进入"must"这样的语句:
@products = Product.search(
query:{
function_score:{
query:{
bool:{
must:{
multi_match:{
fields: ['brand^5', '_all'],
query: "#{query}",
fuzziness: "AUTO"
}
},
filter:{
bool:{
must: array
}
}
}
},
field_value_factor:{
field: "popularity",
modifier: "log1p"
}
}
}).page(page).per(25)
但是,这会导致 ES 出现格式错误的请求错误。
确保您的数组元素不是字符串。您的示例显示:
array = ['{term: {"brand":"NordicTrack"}}', {term: {"product_type":"Treadmill"}}]
应该是:
array = [{term: {"brand":"NordicTrack"}}, {term: {"product_type":"Treadmill"}}]
如果您在 ruby 中构建数组,它应该如下所示:
array = []
array.push term: {"brand":"NordicTrack"}
array.push term: {"product_type":"Treadmill"}