Spring数据elasticsearch查询具有多个字段的产品

时间:2015-06-29 15:31:07

标签: elasticsearch spring-data spring-data-elasticsearch

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

布尔字段用于过滤器。

ProductName ProductUrl 都有相应的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"
                        }
                    }
                }
            }
        }
    }
}

0 个答案:

没有答案