我想使用ElasticSearch搜索我的产品系列。
如果我有这样的对象:
{ name: "Product Name", producer: "Best Producer"}
我想通过搜索找到这个对象:
等
此代码效果很好,但例如“name”不是前缀:
Product.search(
{
multi_match: {
query: params[:search_input],
type: "phrase_prefix",
fields: ["name", "producer"],
operator: "and"
}
})
如何改进?
答案 0 :(得分:0)
您可以对多重匹配参数使用bool,should和term。
Product.search(:query => @query)
@query = {
:bool => {
:must => @must_queries
}
}
:bool => {
:should => [
{
:terms => {
:your_mathcing_field_name => value
}
}
]
}
您可以为每个字段添加多个字词。
答案 1 :(得分:0)
感谢您的回答。
我设法解决了这个问题。 这是我的解决方案:
Product.search(
{
multi_match: {
query: params[:search_input],
type: "best_fields",
fields: ["name", "producer"],
operator: "and"
}
}
)
我的映射如下所示:
mapping do
indexes :name, type: :string, search_analyzer: :str_search_analyzer, index_analyzer: :str_index_analyzer
indexes :producer, type: :string, search_analyzer: :str_search_analyzer, index_analyzer: :str_index_analyzer
end