📄 testcmssearch.java
字号:
echo("Search1: " + cmsSearchBean.getSearchResultCount() + " results found, total duration: " + duration + " ms");
cmsSearchBean.setSearchPage(2);
duration = -System.currentTimeMillis();
results = cmsSearchBean.getSearchResult();
duration += System.currentTimeMillis();
echo("Search2: " + cmsSearchBean.getSearchResultCount() + " results found, total duration: " + duration + " ms");
}
/**
* Tests the CmsSearch with folder names with upper case letters.<p>
*
* @throws Exception in case the test fails
*/
public void testCmsSearchUppercaseFolderName() throws Exception {
CmsObject cms = getCmsObject();
echo("Testing search for case sensitive folder names");
echo("Testing search for case sensitive folder name: /testUPPERCASE/");
testCmsSearchUppercaseFolderNameUtil(cms, "/testUPPERCASE/", 1);
// extension of this test for 7.0.2:
// now it is possible to search in restricted folders in a case sensitive way
echo("Testing search for case sensitive folder name: /TESTuppercase/");
testCmsSearchUppercaseFolderNameUtil(cms, "/TESTuppercase/", 1);
// let's see if we find 2 results when we don't use a search root
echo("Testing search for case sensitive folder names without a site root");
testCmsSearchUppercaseFolderNameUtil(cms, null, 2);
}
/**
* Internal helper for test with same name.<p>
*
* @param cms the current users OpenCms context
* @param folderName the folder name to perform the test in
* @param expected the expected result size of the search
*
* @throws Exception in case the test fails
*/
private void testCmsSearchUppercaseFolderNameUtil(CmsObject cms, String folderName, int expected) throws Exception {
if (folderName != null) {
// create test folder
cms.createResource(folderName, CmsResourceTypeFolder.RESOURCE_TYPE_ID, null, null);
cms.unlockResource(folderName);
// create master resource
importTestResource(
cms,
"org/opencms/search/pdf-test-112.pdf",
folderName + "master.pdf",
CmsResourceTypeBinary.getStaticTypeId(),
Collections.EMPTY_LIST);
// publish the project and update the search index
I_CmsReport report = new CmsShellReport(cms.getRequestContext().getLocale());
OpenCms.getSearchManager().rebuildIndex(INDEX_OFFLINE, report);
}
// search for "pdf"
CmsSearch cmsSearchBean = new CmsSearch();
cmsSearchBean.init(cms);
cmsSearchBean.setIndex(INDEX_OFFLINE);
cmsSearchBean.setQuery("+Testfile +Struktur");
if (folderName != null) {
CmsSearchParameters parameters = cmsSearchBean.getParameters();
parameters.setSearchRoots(folderName);
cmsSearchBean.setParameters(parameters);
}
List results = cmsSearchBean.getSearchResult();
printResults(results, cms);
assertEquals(expected, results.size());
}
/**
* Test the cms search indexer.<p>
*
* @throws Throwable if something goes wrong
*/
public void testCmsSearchXmlContent() throws Throwable {
CmsObject cms = getCmsObject();
echo("Testing search for xml contents");
CmsSearch cmsSearchBean = new CmsSearch();
cmsSearchBean.init(cms);
cmsSearchBean.setIndex(INDEX_OFFLINE);
List results;
cmsSearchBean.setQuery(">>SearchEgg1<<");
results = cmsSearchBean.getSearchResult();
assertEquals(1, results.size());
assertEquals("/sites/default/xmlcontent/article_0001.html", ((CmsSearchResult)results.get(0)).getPath());
cmsSearchBean.setQuery(">>SearchEgg2<<");
results = cmsSearchBean.getSearchResult();
assertEquals(1, results.size());
assertEquals("/sites/default/xmlcontent/article_0002.html", ((CmsSearchResult)results.get(0)).getPath());
cmsSearchBean.setQuery(">>SearchEgg3<<");
results = cmsSearchBean.getSearchResult();
assertEquals(1, results.size());
assertEquals("/sites/default/xmlcontent/article_0003.html", ((CmsSearchResult)results.get(0)).getPath());
// check (on console) that the file does contain a link to the /xmlcontent/ folder
CmsFile article4 = cms.readFile("/xmlcontent/article_0004.html");
CmsXmlContent content = CmsXmlContentFactory.unmarshal(cms, article4, true);
echo(content.toString());
// now search for another Query "xmlcontent", this must not be found in article 4 since it is excluded
cmsSearchBean.setQuery("xmlcontent");
results = cmsSearchBean.getSearchResult();
assertEquals(1, results.size());
assertEquals("/sites/default/xmlcontent/article_0003.html", ((CmsSearchResult)results.get(0)).getPath());
// assertEquals("/sites/default/xmlcontent/article_0004.html", ((CmsSearchResult)results.get(1)).getPath());
}
/**
* Tests index generation with different analyzers.<p>
*
* This test was added in order to verify proper generation of resource "root path" information
* in the index.
*
* @throws Throwable if something goes wrong
*/
public void testIndexGeneration() throws Throwable {
CmsSearchIndex searchIndex = new CmsSearchIndex(INDEX_TEST);
searchIndex.setProjectName("Offline");
// important: use german locale for a special treat on term analyzing
searchIndex.setLocale(Locale.GERMAN);
searchIndex.setRebuildMode(CmsSearchIndex.REBUILD_MODE_AUTO);
// available pre-configured in the test configuration files opencms-search.xml
searchIndex.addSourceName("source1");
// initialize the new index
searchIndex.initialize();
// add the search index to the manager
OpenCms.getSearchManager().addSearchIndex(searchIndex);
I_CmsReport report = new CmsShellReport(Locale.ENGLISH);
// this call does not throws the rebuild index event
OpenCms.getSearchManager().rebuildAllIndexes(report);
// perform a search on the newly generated index
CmsSearch searchBean = new CmsSearch();
List searchResult;
searchBean.init(getCmsObject());
searchBean.setIndex(INDEX_TEST);
searchBean.setQuery(">>SearchEgg1<<");
// assert one file is found in the default site
searchResult = searchBean.getSearchResult();
assertEquals(1, searchResult.size());
assertEquals("/sites/default/xmlcontent/article_0001.html", ((CmsSearchResult)searchResult.get(0)).getPath());
// change seach root and assert no more files are found
searchBean.setSearchRoot("/folder1/");
searchResult = searchBean.getSearchResult();
assertEquals(0, searchResult.size());
}
/**
* Tests if <code>{@link CmsSearch#setQuery(String)}</code> modifies
* the query in an undesireable way (changes url encoded Strings). <p>
*/
public void testQueryEncoding() {
// without encoding
String query = "謑m黨lm鋒er";
CmsSearch test = new CmsSearch();
test.setQuery(query);
assertEquals(query, test.getQuery());
// with encoding
query = CmsEncoder.encode(query, CmsEncoder.ENCODING_UTF_8);
test.setQuery(query);
assertEquals(query, test.getQuery());
}
/**
* Tests an issue where no results are found in folders that have names
* like <code>/basisdienstleistungen_-_zka/</code>.<p>
*
* @throws Exception if the test fails
*/
public void testSearchIssueWithSpecialFoldernames() throws Exception {
CmsObject cms = getCmsObject();
echo("Testing search issue with special folder name");
String folderName = "/basisdienstleistungen_-_zka/";
cms.copyResource("/types/", folderName);
cms.unlockProject(cms.getRequestContext().currentProject().getUuid());
OpenCms.getPublishManager().publishProject(cms);
OpenCms.getPublishManager().waitWhileRunning();
CmsSearch cmsSearchBean = new CmsSearch();
cmsSearchBean.init(cms);
cmsSearchBean.setIndex(INDEX_TEST);
List results;
cmsSearchBean.setSearchRoot("/");
cmsSearchBean.setQuery("+Alkacon +OpenCms");
results = cmsSearchBean.getSearchResult();
TestCmsSearch.printResults(results, cms);
assertEquals(8, results.size());
assertEquals("/sites/default" + folderName + "text.txt", ((CmsSearchResult)results.get(0)).getPath());
cmsSearchBean.setSearchRoot(folderName);
cmsSearchBean.setQuery("+Alkacon +OpenCms");
results = cmsSearchBean.getSearchResult();
TestCmsSearch.printResults(results, cms);
assertEquals(1, results.size());
assertEquals("/sites/default" + folderName + "text.txt", ((CmsSearchResult)results.get(0)).getPath());
}
/**
* Prints the given list of search results to STDOUT.<p>
*
* @param searchResult the list to print
* @param cms the current OpenCms user context
*/
protected static void printResults(List searchResult, CmsObject cms) {
printResults(searchResult, cms, false);
}
/**
* Prints the given list of search results to STDOUT.<p>
*
* @param searchResult the list to print
* @param cms the current OpenCms user context
* @param showExcerpt if <code>true</code>, the generated excerpt is also displayed
*/
protected static void printResults(List searchResult, CmsObject cms, boolean showExcerpt) {
Iterator i = searchResult.iterator();
int count = 0;
int colPath = 0;
int colTitle = 0;
while (i.hasNext()) {
CmsSearchResult res = (CmsSearchResult)i.next();
String path = cms.getRequestContext().removeSiteRoot(res.getPath());
colPath = Math.max(colPath, path.length() + 3);
String title = res.getField(CmsSearchField.FIELD_TITLE);
if (title == null) {
title = "";
} else {
title = title.trim();
}
colTitle = Math.max(colTitle, title.length() + 3);
}
i = searchResult.iterator();
while (i.hasNext()) {
CmsSearchResult res = (CmsSearchResult)i.next();
count++;
System.out.print(CmsStringUtil.padRight("" + count, 4));
System.out.print(CmsStringUtil.padRight(cms.getRequestContext().removeSiteRoot(res.getPath()), colPath));
String title = res.getField(CmsSearchField.FIELD_TITLE);
if (title == null) {
title = "";
} else {
title = title.trim();
}
System.out.print(CmsStringUtil.padRight(title, colTitle));
String type = res.getDocumentType();
if (type == null) {
type = "";
}
System.out.print(CmsStringUtil.padRight(type, 10));
System.out.print(CmsStringUtil.padRight(""
+ CmsDateUtil.getDateTime(res.getDateLastModified(), DateFormat.SHORT, Locale.GERMAN), 17));
System.out.println("score: " + res.getScore());
if (showExcerpt) {
System.out.println(res.getExcerpt());
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -