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 name
和id
布尔字段用于过滤器。
ProductName 和 ProductUrl 都有相应的String locale
和String name
或String 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"
}
}
}
}
}
}
}