【发布时间】:2017-10-05 22:22:02
【问题描述】:
Elasticsearch 多重匹配没有提升字段,这里是代码。
{
"size": 15,
"from": 0,
"query": {
"filtered": {
"query": {
"multi_match": {
"query": "shoes",
"fields": ["category^3", "brand^2", "title^1", "description"],
"fuzziness": "AUTO"
}
},
"filter": {
"bool": {
"must": [],
"should": null
}
}
}
}
}
理想情况下,我想要的是,如果有人搜索关键字 shoes,他应该得到相关的结果。在这种情况下,它应该看看是否有鞋子的类别,这应该有 3 的提升。然后它应该看看是否有任何品牌中有关键字“鞋子”,这应该有 2 的提升。然后它应该查看标题和描述。
因此,如果产品具有上述所有条件,那么它应该显示出最高的提升。
编辑:这是我的映射。
{
"mappings": {
"products": {
"properties": {
"variations": {
"type": "nested",
"index": "not_analyzed"
}
}
}
}
}
编辑:好吧,我还没有定义该字段其余部分的类型。我想保留它的默认值。其次,我对查询嵌套字段不感兴趣。因为这些通常包括产品的变化,例如颜色、尺寸等。这是一个示例文档。
{
"title": "100% Cotton Unstitched Suit For Men",
"slug": "100-cotton-unstitched-suit-for-men",
"price": 200,
"sale_price": 0,
"vendor_id": 32,
"featured": 0,
"viewed": 20,
"stock": 4,
"sku": "XXX-B",
"rating": 0,
"active": 1,
"vendor_name": "house_of_suits",
"brand": "armani",
"category": [
"men_fashion",
"traditional_clothing",
"unstitched_fabric"
],
"image": "imagename.jpg",
"variations": [
{
"variation_id": "34",
"stock": 5,
"price": 200,
"variation_image": "",
"sku": "XXX-C",
"size": "m",
"color": "red"
},
{
"variation_id": "35",
"stock": 5,
"price": 200,
"variation_image": "",
"sku": "XXX-D",
"size": "l",
"color": "red"
}
]
}
【问题讨论】:
-
Boost 不是“寻找”顺序的一个因素。请举一个文档示例(并尝试 ^300 ^200 ^100 而不是 ^3 ^2 ^1)
-
我已经尝试了您的建议,添加了 ^300 ^200 ^100 但对评分完全没有影响。
-
您能否打印完整的文档映射,以便我们可以看到这些字段的字段和数据类型。匹配查询旨在在分析的字段上运行,但我看到您的变体嵌套对象没有被分析。
-
@zachdb86 我已经通过回答更新了
-
感谢您发布示例文档。我看到您要搜索的字段没有嵌套。我已经更新了答案以反映这一点。另外,也许这是一个疏忽,但我发现缺少描述。请尝试使用更新后的查询运行解释
标签: elasticsearch elasticsearch-plugin