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

📄 testcmssearchadvancedfeatures.java

📁 找了很久才找到到源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

        cms.lockResource("/folder1/");
        cms.writePropertyObject("/folder1/", cat1);
        cms.unlockResource("/folder1/");
        cms.lockResource("/folder2/");
        cms.writePropertyObject("/folder2/", cat2);
        cms.unlockResource("/folder2/");
        cms.lockResource("/types/");
        cms.writePropertyObject("/types/", cat3);
        cms.unlockResource("/types/");

        // 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);
        searchBean.setMatchesPerPage(1000);
        searchBean.setCalculateCategories(true);

        // first run is default sort order
        searchResult = searchBean.getSearchResult();
        System.out.println("Result sorted by relevance:");
        TestCmsSearch.printResults(searchResult, cms);

        Map categories = searchBean.getSearchResultCategories();
        // make sure categories where found
        assertNotNull(categories);
        // print the categories 
        System.out.println(CmsSearchCategoryCollector.formatCategoryMap(categories));
        // make sure the results are as expected
        assertTrue(categories.containsKey(cat1.getValue()));
        assertTrue(categories.containsKey(cat2.getValue()));
        assertTrue(categories.containsKey(cat3.getValue()));
        assertTrue(categories.containsKey(CmsSearchCategoryCollector.UNKNOWN_CATEGORY));
        // result must be all 3 categories plus 1 for "unknown"
        assertEquals(4, categories.size());
        // assert result count
        assertEquals(new Integer(7), categories.get(cat1.getValue()));
        assertEquals(new Integer(4), categories.get(cat2.getValue()));
        assertEquals(new Integer(1), categories.get(cat3.getValue()));
        assertEquals(new Integer(1), categories.get(CmsSearchCategoryCollector.UNKNOWN_CATEGORY));

        // count the category results
        searchBean.setCalculateCategories(false);

        String[][] cats = new String[][] {
            new String[] {cat1.getValue()},
            new String[] {cat2.getValue()},
            new String[] {cat3.getValue()},
            new String[] {cat1.getValue(), cat3.getValue()},
            new String[] {cat2.getValue(), cat3.getValue()},
            new String[] {cat1.getValue(), cat2.getValue()},
            new String[] {cat1.getValue(), cat2.getValue(), cat3.getValue()}};

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

        for (int k = 0; k < expected.length; k++) {
            int expect = expected[k];
            String[] catList = cats[k];
            searchBean.setCategories(catList);
            searchResult = searchBean.getSearchResult();
            System.out.println("Result for search "
                + k
                + " (found "
                + searchResult.size()
                + ", expected "
                + expect
                + ")");
            TestCmsSearch.printResults(searchResult, cms);
            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();
            System.out.println("Result for search "
                + i
                + " (found "
                + searchResult.size()
                + ", expected "
                + expect
                + ")");
            TestCmsSearch.printResults(searchResult, cms);
            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();
            System.out.println("Result for search "
                + i
                + " (found "
                + searchResult.size()
                + ", expected "
                + expect
                + ")");
            TestCmsSearch.printResults(searchResult, cms);
            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();
            System.out.println("Result for search "
                + i
                + " (found "
                + searchResult.size()
                + ", expected "
                + expect
                + ")");
            TestCmsSearch.printResults(searchResult, cms);
            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();
            System.out.println("Result for search "
                + i
                + " (found "
                + searchResult.size()
                + ", expected "
                + expect
                + ")");
            TestCmsSearch.printResults(searchResult, cms);
            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();
        System.out.println("Result sorted by relevance:");
        TestCmsSearch.printResults(searchResult, cms);

        // second run use Title sort order
        String lastTitle = null;
        searchBean.setSortOrder(CmsSearchParameters.SORT_TITLE);
        searchResult = searchBean.getSearchResult();
        System.out.println("Result sorted by title:");
        TestCmsSearch.printResults(searchResult, cms);

        Iterator i = searchResult.iterator();
        while (i.hasNext()) {
            CmsSearchResult res = (CmsSearchResult)i.next();
            if (lastTitle != null) {
                // make sure result is sorted correctly
                assertTrue(lastTitle.compareTo(res.getField(CmsSearchField.FIELD_TITLE)) <= 0);
            }
            lastTitle = res.getField(CmsSearchField.FIELD_TITLE);
        }

        // third run use date last modified
        long lastTime = 0;
        searchBean.setSortOrder(CmsSearchParameters.SORT_DATE_LASTMODIFIED);
        searchResult = searchBean.getSearchResult();
        System.out.println("Result sorted by date last modified:");
        TestCmsSearch.printResults(searchResult, cms);

        i = searchResult.iterator();
        while (i.hasNext()) {
            CmsSearchResult res = (CmsSearchResult)i.next();
            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 + -