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 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果