master:系统搜索完善;

pull/1121/head
liujiang 2025-10-11 21:16:17 +08:00
parent 29fde84716
commit 41c238f15d
2 changed files with 4 additions and 62 deletions

View File

@ -1032,40 +1032,11 @@ public class WebsiteAPPServiceImpl implements IWebsiteAPPService {
}
// 添加 multiMatch 查询
if (StringUtils.isNotBlank(searchDTO.getSearch())) {
BoolQuery.Builder shouldBoolQuery = new BoolQuery.Builder();
// 1. 多字段匹配(分词)
MultiMatchQuery multiMatchQuery = MultiMatchQuery.of(m -> m
.query(searchDTO.getSearch())
.fields("prodArtNum^3", "storeName^2", "prodCateName^2", "parCateName^2")
.type(TextQueryType.BestFields)
.fuzziness("AUTO")
.fields("storeName", "prodCateName", "parCateName", "prodArtNum")
);
shouldBoolQuery.should(multiMatchQuery._toQuery());
// 2. 商品编号的精确匹配
shouldBoolQuery.should(s -> s.wildcard(w -> w
.field("prodArtNum")
.value("*" + searchDTO.getSearch() + "*")
.caseInsensitive(true)
));
// 3. 短语匹配(带权重)- 完全匹配的得分更高
shouldBoolQuery.should(s -> s.matchPhrase(m -> m
.field("storeName")
.query(searchDTO.getSearch())
.boost(2.0f) // 店铺名称短语匹配权重加倍
));
shouldBoolQuery.should(s -> s.matchPhrase(m -> m
.field("prodCateName")
.query(searchDTO.getSearch())
.boost(1.5f) // 分类名称短语匹配权重增加
));
shouldBoolQuery.should(s -> s.matchPhrase(m -> m
.field("parCateName")
.query(searchDTO.getSearch())
.boost(1.5f) // 父级分类短语匹配权重增加
));
boolQuery.must(shouldBoolQuery.build()._toQuery());
boolQuery.must(multiMatchQuery._toQuery());
}
// 档口ID列表 过滤条件
if (CollectionUtils.isNotEmpty(searchDTO.getStoreIdList())) {

View File

@ -1927,40 +1927,11 @@ public class WebsitePCServiceImpl implements IWebsitePCService {
}
// 添加 multiMatch 查询
if (StringUtils.isNotBlank(searchDTO.getSearch())) {
BoolQuery.Builder shouldBoolQuery = new BoolQuery.Builder();
// 1. 多字段匹配(分词)
MultiMatchQuery multiMatchQuery = MultiMatchQuery.of(m -> m
.query(searchDTO.getSearch())
.fields("prodArtNum^3", "storeName^2", "prodCateName^2", "parCateName^2")
.type(TextQueryType.BestFields)
.fuzziness("AUTO")
.fields("storeName", "prodCateName", "parCateName", "prodArtNum")
);
shouldBoolQuery.should(multiMatchQuery._toQuery());
// 2. 商品编号的精确匹配
shouldBoolQuery.should(s -> s.wildcard(w -> w
.field("prodArtNum")
.value("*" + searchDTO.getSearch() + "*")
.caseInsensitive(true)
));
// 3. 短语匹配(带权重)- 完全匹配的得分更高
shouldBoolQuery.should(s -> s.matchPhrase(m -> m
.field("storeName")
.query(searchDTO.getSearch())
.boost(2.0f) // 店铺名称短语匹配权重加倍
));
shouldBoolQuery.should(s -> s.matchPhrase(m -> m
.field("prodCateName")
.query(searchDTO.getSearch())
.boost(1.5f) // 分类名称短语匹配权重增加
));
shouldBoolQuery.should(s -> s.matchPhrase(m -> m
.field("parCateName")
.query(searchDTO.getSearch())
.boost(1.5f) // 父级分类短语匹配权重增加
));
boolQuery.must(shouldBoolQuery.build()._toQuery());
boolQuery.must(multiMatchQuery._toQuery());
}
// 档口ID 过滤条件
if (CollectionUtils.isNotEmpty(searchDTO.getStoreIdList())) {