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