⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testcmssearchadvancedfeatures.java

📁 cms是开源的框架
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            searchBean.setCategories(catList);
            searchResult = searchBean.getSearchResult();
            Iterator j = searchResult.iterator();
            System.out.println("Result for search "
                + k
                + " (found "
                + searchResult.size()
                + ", expected "
                + expect
                + ")");
            while (j.hasNext()) {
                CmsSearchResult res = (CmsSearchResult)j.next();
                System.out.print(CmsStringUtil.padRight(cms.getRequestContext().removeSiteRoot(res.getPath()), 50));
                System.out.print(CmsStringUtil.padRight(res.getTitle(), 40));
                System.out.println("  score: " + res.getScore());
            }
            assertEquals(expect, searchResult.size());
        }
    }

    /**
     * Tests searching with restrictions.<p>
     * 
     * @throws Exception if the test fails
     */
    public void testSearchRestriction() throws Exception {

        CmsObject cms = getCmsObject();
        echo("Testing searching in search results");

        CmsSearch searchBean = new CmsSearch();
        List searchResult;
        String query = "OpenCms";

        searchBean.init(cms);
        searchBean.setIndex(INDEX_OFFLINE);
        searchBean.setMatchesPerPage(1000);
        searchBean.setQuery(query);

        // first part of the rest is identical to "testMultipleSearchRoots()"
        String[][] roots = new String[][] {
            new String[] {"/folder1/"},
            new String[] {"/folder2/"},
            new String[] {"/types/"},
            new String[] {"/folder2/", "/types/"},
            new String[] {"/folder1/", "/types/"},
            new String[] {"/folder1/", "/folder2/"},
            new String[] {"/folder1/", "/folder2/", "/types/"}};

        int[] expected = new int[] {7, 4, 1, 5, 8, 11, 12};

        for (int i = 0; i < expected.length; i++) {
            int expect = expected[i];
            String[] rootList = roots[i];
            searchBean.setSearchRoots(rootList);
            searchResult = searchBean.getSearchResult();
            Iterator j = searchResult.iterator();
            System.out.println("Result for search "
                + i
                + " (found "
                + searchResult.size()
                + ", expected "
                + expect
                + ")");
            while (j.hasNext()) {
                CmsSearchResult res = (CmsSearchResult)j.next();
                System.out.print(CmsStringUtil.padRight(cms.getRequestContext().removeSiteRoot(res.getPath()), 50));
                System.out.print(CmsStringUtil.padRight(res.getTitle(), 40));
                System.out.println("  score: " + res.getScore());
            }
            assertEquals(expect, searchResult.size());
        }

        // now create a restriction to search for an additional "Alkacon" (effectivly searching for "OpenCms Alkacon")
        CmsSearchParameters restriction;
        restriction = new CmsSearchParameters("Alkacon", null, null, null, false, null);

        expected = new int[] {3, 2, 1, 3, 4, 5, 6};

        for (int i = 0; i < expected.length; i++) {
            int expect = expected[i];
            String[] rootList = roots[i];
            searchBean.setSearchRoots(rootList);
            searchBean.setResultRestriction(restriction);
            searchResult = searchBean.getSearchResult();
            Iterator j = searchResult.iterator();
            System.out.println("Result for search "
                + i
                + " (found "
                + searchResult.size()
                + ", expected "
                + expect
                + ")");
            while (j.hasNext()) {
                CmsSearchResult res = (CmsSearchResult)j.next();
                System.out.print(CmsStringUtil.padRight(cms.getRequestContext().removeSiteRoot(res.getPath()), 50));
                System.out.print(CmsStringUtil.padRight(res.getTitle(), 40));
                System.out.println("  score: " + res.getScore());
            }
            assertEquals(expect, searchResult.size());
        }

        // another run of tests using searching only in the "meta" field
        restriction = new CmsSearchParameters("Alkacon", Arrays.asList(new String[] {"meta"}), null, null, false, null);

        expected = new int[] {0, 0, 1, 1, 1, 0, 1};

        for (int i = 0; i < expected.length; i++) {
            int expect = expected[i];
            String[] rootList = roots[i];
            searchBean.setSearchRoots(rootList);
            searchBean.setResultRestriction(restriction);
            searchResult = searchBean.getSearchResult();
            Iterator j = searchResult.iterator();
            System.out.println("Result for search "
                + i
                + " (found "
                + searchResult.size()
                + ", expected "
                + expect
                + ")");
            while (j.hasNext()) {
                CmsSearchResult res = (CmsSearchResult)j.next();
                System.out.print(CmsStringUtil.padRight(cms.getRequestContext().removeSiteRoot(res.getPath()), 50));
                System.out.print(CmsStringUtil.padRight(res.getTitle(), 40));
                System.out.println("  score: " + res.getScore());
            }
            assertEquals(expect, searchResult.size());
        }

        // another run of tests using categories that have been defined in "testSearchCategories()"
        // reset search bean settings (restriction changed them) to initial values (see start of method)
        searchBean = new CmsSearch();
        searchBean.init(cms);
        searchBean.setIndex(INDEX_OFFLINE);
        searchBean.setMatchesPerPage(1000);
        searchBean.setQuery(query);
        restriction = new CmsSearchParameters(
            null,
            null,
            null,
            Arrays.asList(new String[] {"category_1", "category_3"}),
            false,
            null);

        expected = new int[] {7, 0, 1, 1, 8, 7, 8};

        for (int i = 0; i < expected.length; i++) {
            int expect = expected[i];
            String[] rootList = roots[i];
            searchBean.setSearchRoots(rootList);
            searchBean.setResultRestriction(restriction);
            searchResult = searchBean.getSearchResult();
            Iterator j = searchResult.iterator();
            System.out.println("Result for search "
                + i
                + " (found "
                + searchResult.size()
                + ", expected "
                + expect
                + ")");
            while (j.hasNext()) {
                CmsSearchResult res = (CmsSearchResult)j.next();
                System.out.print(CmsStringUtil.padRight(cms.getRequestContext().removeSiteRoot(res.getPath()), 50));
                System.out.print(CmsStringUtil.padRight(res.getTitle(), 40));
                System.out.println("  score: " + res.getScore());
            }
            assertEquals(expect, searchResult.size());
        }
    }

    /**
     * Tests sorting of search results.<p>
     * 
     * @throws Exception if the test fails
     */
    public void testSortSearchResults() throws Exception {

        CmsObject cms = getCmsObject();
        echo("Testing sorting of search results");

        // perform a search on the newly generated index
        CmsSearch searchBean = new CmsSearch();
        List searchResult;
        String query = "OpenCms";

        // update the search index used
        OpenCms.getSearchManager().rebuildIndex(INDEX_OFFLINE, new CmsShellReport(cms.getRequestContext().getLocale()));

        searchBean.init(cms);
        searchBean.setIndex(INDEX_OFFLINE);
        searchBean.setQuery(query);

        // first run is default sort order
        searchResult = searchBean.getSearchResult();
        Iterator i = searchResult.iterator();
        System.out.println("Result sorted by relevance:");
        while (i.hasNext()) {
            CmsSearchResult res = (CmsSearchResult)i.next();
            System.out.print(CmsStringUtil.padRight(cms.getRequestContext().removeSiteRoot(res.getPath()), 50));
            System.out.print(CmsStringUtil.padRight(res.getTitle(), 40));
            System.out.print(CmsDateUtil.getHeaderDate(res.getDateLastModified().getTime()));
            System.out.println("  score: " + res.getScore());
        }

        // second run use Title sort order
        String lastTitle = null;
        searchBean.setSortOrder(CmsSearchParameters.SORT_TITLE);
        searchResult = searchBean.getSearchResult();
        i = searchResult.iterator();
        System.out.println("Result sorted by title:");
        while (i.hasNext()) {
            CmsSearchResult res = (CmsSearchResult)i.next();
            System.out.print(CmsStringUtil.padRight(cms.getRequestContext().removeSiteRoot(res.getPath()), 50));
            System.out.print(CmsStringUtil.padRight(res.getTitle(), 40));
            System.out.print(CmsDateUtil.getHeaderDate(res.getDateLastModified().getTime()));
            System.out.println("  score: " + res.getScore());
            if (lastTitle != null) {
                // make sure result is sorted correctly
                assertTrue(lastTitle.compareTo(res.getTitle()) <= 0);
            }
            lastTitle = res.getTitle();
        }

        // third run use date last modified
        long lastTime = 0;
        searchBean.setSortOrder(CmsSearchParameters.SORT_DATE_LASTMODIFIED);
        searchResult = searchBean.getSearchResult();
        i = searchResult.iterator();
        System.out.println("Result sorted by date last modified:");
        while (i.hasNext()) {
            CmsSearchResult res = (CmsSearchResult)i.next();
            System.out.print(CmsStringUtil.padRight(cms.getRequestContext().removeSiteRoot(res.getPath()), 50));
            System.out.print(CmsStringUtil.padRight(res.getTitle(), 40));
            System.out.print(CmsDateUtil.getHeaderDate(res.getDateLastModified().getTime()));
            System.out.println("  score: " + res.getScore());
            if (lastTime > 0) {
                // make sure result is sorted correctly
                assertTrue(lastTime >= res.getDateLastModified().getTime());
                assertTrue(res.getScore() <= 100);
            }
            lastTime = res.getDateLastModified().getTime();
        }

        assertNull(searchBean.getSearchResultCategories());
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -