Elasticsearch提升了多种匹配方式

时间:2017-10-05 22:22:02

标签: elasticsearch elasticsearch-plugin

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
                }
            }
        }
    }
}

理想情况下,我想要的是,如果有人搜索关键字鞋子,他应该得到相关的结果。在这种情况下,它应该看看是否有一个鞋子的类别,这应该有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"
        }
    ]
}

1 个答案:

答案 0 :(得分:1)

过滤后的查询已弃用,应替换为至少包含must子句和filter子句的bool。此外,您的场增强是正确的,但是,multi_match根据您定义的类型得分不同。默认类型best_fields使用最佳字段中的_score。在下面的示例中,下面的示例使用most_fields类型,它结合了每个字段的分数,并且应该完成您想要的任务。我会查看this页面以了解有关不同类型的更多信息。

t