hibernateSearch搜索时,对不带空格的内容可以检索,而带了空格的就匹配不上了,以下是搜索相关代码,求大神帮忙
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(Product.class).get();
Query snPhraseQuery = queryBuilder.phrase().onField("sn").sentence(keyword).createQuery();
Query introductionPhraseQuery = queryBuilder.phrase().withSlop(3).onField("introduction").sentence(keyword).createQuery();
Query isMarketablePhraseQuery = queryBuilder.phrase().onField("isMarketable").sentence("true").createQuery();
Query isListPhraseQuery = queryBuilder.phrase().onField("isList").sentence("true").createQuery();
Query isActivePhraseQuery = queryBuilder.phrase().onField("isActive").sentence("true").createQuery();
BooleanJunction<?> junction = queryBuilder.bool().must(isMarketablePhraseQuery).must(isListPhraseQuery).must(isActivePhraseQuery);
BooleanJunction<?> subJunction = queryBuilder.bool().should(snPhraseQuery).should(introductionPhraseQuery);
Query namePhraseQuery = queryBuilder.keyword().wildcard().onField("name").matching(keyword).createQuery();
Query keywordFuzzyQuery = queryBuilder.keyword().wildcard().onField("keyword").matching(keyword).createQuery();
subJunction.should(namePhraseQuery).should(keywordFuzzyQuery);
junction.must(subJunction.createQuery());
if (type != null) {
Query typePhraseQuery = queryBuilder.phrase().onField("type").sentence(String.valueOf(type)).createQuery();
junction.must(typePhraseQuery);
}
if (storeType != null) {
Query storeTypePhraseQuery = queryBuilder.phrase().onField("store.type").sentence(String.valueOf(storeType)).createQuery();
junction.must(storeTypePhraseQuery);
}
if (store != null) {
Query storePhraseQuery = queryBuilder.phrase().onField("store.id").sentence(String.valueOf(store.getId())).createQuery();
junction.must(storePhraseQuery);
}
if (isOutOfStock != null) {
Query isOutOfStockPhraseQuery = queryBuilder.phrase().onField("skus.isOutOfStock").sentence(String.valueOf(isOutOfStock)).createQuery();
junction.must(isOutOfStockPhraseQuery);
}
if (isStockAlert != null) {
Query isStockAlertPhraseQuery = queryBuilder.phrase().onField("skus.isStockAlert").sentence(String.valueOf(isStockAlert)).createQuery();
junction.must(isStockAlertPhraseQuery);
}
if (startPrice != null && endPrice != null) {
Query priceRangeQuery = queryBuilder.range().onField("price").from(startPrice.doubleValue()).to(endPrice.doubleValue()).createQuery();
junction.must(priceRangeQuery);
} else if (startPrice != null) {
Query priceRangeQuery = queryBuilder.range().onField("price").above(startPrice.doubleValue()).createQuery();
junction.must(priceRangeQuery);
} else if (endPrice != null) {
Query priceRangeQuery = queryBuilder.range().onField("price").below(endPrice.doubleValue()).createQuery();
junction.must(priceRangeQuery);
}
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(junction.createQuery(), Product.class);
SortField[] sortFields = null;
if (orderType != null) {
switch (orderType) {
case TOP_DESC:
sortFields = new SortField[] { new SortField("isTop", SortField.Type.STRING, true), new SortField(null, SortField.Type.SCORE), new SortField("createdDate", SortField.Type.LONG, true) };
break;
case PRICE_ASC:
sortFields = new SortField[] { new SortField("price", SortField.Type.DOUBLE, false), new SortField("createdDate", SortField.Type.LONG, true) };
break;
case PRICE_DESC:
sortFields = new SortField[] { new SortField("price", SortField.Type.DOUBLE, true), new SortField("createdDate", SortField.Type.LONG, true) };
break;
case SALES_DESC:
sortFields = new SortField[] { new SortField("sales", SortField.Type.LONG, true), new SortField("createdDate", SortField.Type.LONG, true) };
break;
case SCORE_DESC:
sortFields = new SortField[] { new SortField("score", SortField.Type.FLOAT, true), new SortField("createdDate", SortField.Type.LONG, true) };
break;
case DATE_DESC:
sortFields = new SortField[] { new SortField("createdDate", SortField.Type.LONG, true) };
break;
}
} else {
sortFields = new SortField[] { new SortField("isTop", SortField.Type.STRING, true), new SortField(null, SortField.Type.SCORE), new SortField("createdDate", SortField.Type.LONG, true) };
}
fullTextQuery.setSort(new Sort(sortFields));
fullTextQuery.setFirstResult((pageable.getPageNumber() - 1) * pageable.getPageSize());
fullTextQuery.setMaxResults(pageable.getPageSize());
return new Page<>(fullTextQuery.getResultList(), fullTextQuery.getResultSize(), pageable);