1

ES新手,抱歉这个愚蠢的问题。

我一直在尝试为products索引创建弹性搜索查询。我可以查询它,但它永远不会像我预期的那样返回。

我可能以错误的方式使用查询构建器,尝试了各种查询构建器,但从未按我预期的那样工作。

我的产品类(为了这个问题更简单):

public class Product {

    private String sku;

    private Boolean soldOut;

    private Boolean freeShipping;

    private Store store;

    private Category category;

    private Set<ProductUrl> urls;

    private Set<ProductName> names;

}

类别nas nameid我用于聚合

布尔字段用于过滤器。

ProductNameProductUrl都有一个String localeString nameString url相应

我目前正在使用以下逻辑构建我的查询

private SearchQuery buildSearchQuery(String searchTerm, List<Long> categories, Pageable pageable) {
    NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
    if (searchTerm != null) {
        builder.withQuery(
                new MultiMatchQueryBuilder(searchTerm, "names.name", "urls.url", "descriptions.description", "sku")
                        .operator(Operator.AND)
                        .type(MultiMatchQueryBuilder.Type.MOST_FIELDS)
        );
    }
    builder.withPageable(pageable);
    return builder.build();
}

问题是很多产品没有匹配,例如:

查询“andro”不返回“android”产品。

我错过了什么?这种构建查询的方式正确吗?

更新 添加names我的产品映射的一部分:

    {
    "mappings": {
        "product": {
            "properties": {
                "names": {
                    "properties": {
                        "id": {
                            "type": "long"
                        },
                        "name": {
                            "type": "string"
                        },
                        "locale": {
                            "type": "string"
                        }
                    }
                }
            }
        }
    }
}
4

0 回答 0