如何在MarkLogic KeyValueQueryDefinition中执行不区分大小写的搜索?

如何在MarkLogic KeyValueQueryDefinition中执行不区分大小写的搜索?,marklogic,Marklogic,以下MarkLogic搜索正在执行区分大小写的搜索?如何使用以下代码段执行不区分大小写的搜索 String optionsName = "PRODUCT_BY_TITLE"; String options ="<search:options xmlns:search='http://marklogic.com/appservices/search'>"+ "</search:options>"; QueryOptionsManager q

以下MarkLogic搜索正在执行区分大小写的搜索?如何使用以下代码段执行不区分大小写的搜索

String optionsName = "PRODUCT_BY_TITLE";
String options ="<search:options xmlns:search='http://marklogic.com/appservices/search'>"+         "</search:options>";

QueryOptionsManager qoManager = 
    client.newServerConfigManager().newQueryOptionsManager();
// create a handle to send the query options
StringHandle writeHandle = new StringHandle(options);
// write the query options to the database
qoManager.writeOptions(optionsName, writeHandle);

QueryManager queryMgr = client.newQueryManager();
KeyValueQueryDefinition kvqdef = queryMgr.newKeyValueDefinition(optionsName);
kvqdef.put(queryMgr.newElementLocator(new QName(ConstantsUtil.BIBLIOGRAPHIC_MSG_NAMESPACE_PREFIX+":"+elementName)), elementValue);              
JacksonHandle handle = new JacksonHandle();
queryMgr.search(kvqdef, handle);                
logger.info("response-->"+handle.toString());
安迪:

KeyValueQueryDefinition用于最简单的情况。您的需求已经升级到更复杂的界面

可以使用StructuredQueryBuilder为元素值查询传入选项:

符合以下代码(未测试)的内容应该可以工作:

StructuredQueryBuilder qb = new StructuredQueryBuilder(optionsName);
StructuredQueryDefinition queryDef = qb.value(
    qb.element(new QName(
        ConstantsUtil.BIBLIOGRAPHIC_MSG_NAMESPACE_PREFIX+":"+elementName)),
    FragmentScope.DOCUMENTS,
    new String[]{"case-insensitive"},
    1,
    elementValue);
JacksonHandle handle = new JacksonHandle();
queryMgr.search(queryDef, handle);

希望这能有所帮助

我收到一个错误:com.marklogic.client.FailedRequestException:本地消息:搜索失败:请求错误。服务器消息:REST-INVALIDPARAM:(错误:FOER0000)无效参数:无效查询结构(检查命名空间):