Hello everyone,
We try to compare the performance between the "simple query API" and DFC Search Service when full text search is enabled. We found that the "simple query API" performs 5-10 times better. It seems like the simple query API can make better use of the caching?
For "simple query API", we create the DQL directly, something like:
SELECT r_object_id,upper(object_name),object_name,r_object_type,a_content_type,a_application_type,r_is_virtual_doc,r_link_cnt,r_lock_owner,r_policy_id,r_assembled_from_id,r_immutable_flag,r_frozen_flag,i_is_reference,score,title,a_status,r_modify_date,r_modifier from dm_document SEARCH DOCUMENT CONTAINS 'test' where type(dm_document) order by 15 desc, 1 ENABLE (RETURN_TOP 501);
As for the DFC Search Service, we use this code:
IDfSearchService m_searchService = DfClient.getLocalClient().newSearchService(sessionManager, docbase);
IDfQueryManager queryManager = m_searchService.newQueryMgr();
IDfQueryBuilder queryBuilder = queryManager.newQueryBuilder("dm_document");
queryBuilder.addSelectedSource(docbase);
queryBuilder.addResultAttribute("r_object_id");
queryBuilder.addResultAttribute("object_name");
queryBuilder.addResultAttribute("object_type");
queryBuilder.addResultAttribute("a_content_type");
queryBuilder.addResultAttribute("a_application_type");
queryBuilder.addResultAttribute("r_is_virtual_doc");
queryBuilder.addResultAttribute("r_link_cnt");
queryBuilder.addResultAttribute("r_lock_owner");
queryBuilder.addResultAttribute("r_policy_id");
queryBuilder.addResultAttribute("r_assembled+from_id");
queryBuilder.addResultAttribute("r_immutable_flag");
queryBuilder.addResultAttribute("r_frozen_flag");
queryBuilder.addResultAttribute("i_is_reference");
queryBuilder.addResultAttribute("score");
queryBuilder.addResultAttribute("title");
queryBuilder.addResultAttribute("a_status");
queryBuilder.addResultAttribute("r_modify_date");
queryBuilder.addResultAttribute("r_modifier");
IDfExpressionSet exprSet = queryBuilder.getRootExpressionSet();
exprSet.addFullTextExpression("test");
IDfQueryProcessor processor = m_searchService.newQueryProcessor(queryBuilder, true);
processor.blockingSearch(180000);
Did we miss something somewhere?
Thanks,
Yongjian