PeterYoung01 2019-10-11 22:26 采纳率: 0%
浏览 240
已结题

hibernateSearch搜索不到带空格的内容

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);
  • 写回答

2条回答 默认 最新

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?