我是一个新手来解决并将我的双手绑在solr上.有人可以在这里解释如何为给定的搜索指定多个facet字段.
我正在使用Solr Admin UI /查询墨水,它允许我只指定一个字段.然而,我想在我的公司搜索上面对多个领域,如地区行业股票交易所等.
我已经浏览了solr wiki和相关文档链接,如下面的 http://docs.lucidworks.com/display/solr/Query+Screen
但它们似乎都没有解释如何指定多个字段.我想构建类似于通常的亚马逊/沃尔玛等搜索UI,它提供多个方面,并在尝试在我计划的公司搜索页面上搜索产品时计数.
我需要一些帮助来提出一个适当的XPath表达式来从XML中提取值.
我可以使用jaxb获取值,但是我需要xpath,因为我有一个决策表类型的映射规则,我想要外部化,如果我使用jaxb将导致很多嵌套的if/else语句,我想避免,因此需要xpath方法.
我有一个xml文件,至少有4个模式构建.我的意思是根模式在特定点有一个元素,表示xs:any,在这个位置注入一个基于不同模式的xml,这反过来又有一个类似的xs:any注入另一个xml来构建final /我使用的实际xml.
这是我正在处理的实际XML结构(我故意修改了值).下面xml中的两个Document节点基于不同的模式
<?xml version="1.0"?>
<env:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:env="CDTS-SUBMIT">
<env:Body>
<cdtPrefix>
<cdtprVersion>01</cdtprVersion>
<cdtprOperation>SUBMIT</cdtprOperation>
<cdtprFunction>GCAMS1O</cdtprFunction>
<cdtprDirectionFlag>O</cdtprDirectionFlag>
</cdtPrefix>
<cdtDataDescription>
<cdtddVersion>01</cdtddVersion>
<cdtddFirmId>ABC</cdtddFirmId>
<cdtddBusinessDataFormat>GCAMS1O-XML</cdtddBusinessDataFormat>
<cdtddReferenceNum>123</cdtddReferenceNum>
<cdtddTrackingNum>123</cdtddTrackingNum>
<cdtddDestination>AQ</cdtddDestination>
<cdtddSeqNum>0000000</cdtddSeqNum>
<cdtddCycleNum>00</cdtddCycleNum>
<cdtddBusinessDate>00000000</cdtddBusinessDate>
</cdtDataDescription>
<cdtBusinessData>
<AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Fr>
<FIId>
<FinInstnId>
<BICFI>ABC</BICFI>
</FinInstnId>
</FIId>
</Fr>
<To>
<FIId>
<FinInstnId>
<BICFI>ABC </BICFI>
</FinInstnId>
</FIId>
</To>
<BizMsgIdr>ABC</BizMsgIdr>
<MsgDefIdr>seev.031.002.05</MsgDefIdr>
<BizSvc>CSD</BizSvc>
<CreDt>9999-99-99T00:02:17Z</CreDt>
</AppHdr>
<Document xmlns="urn:swift:xsd:seev.031.002.05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CorpActnNtfctn>
<NtfctnGnlInf>
<NtfctnTp>REPL</NtfctnTp>
<PrcgSts>
<Cd>
<EvtCmpltnsSts>COMP</EvtCmpltnsSts>
<EvtConfSts>CONF</EvtConfSts>
</Cd>
</PrcgSts>
</NtfctnGnlInf>
<PrvsNtfctnId>
<Id>00000000</Id>
</PrvsNtfctnId>
<EvtsLkg>
<EvtId>
<LkdOffclCorpActnEvtId>US8</LkdOffclCorpActnEvtId>
</EvtId>
<LkgTp>
<Cd>INFO</Cd>
</LkgTp>
</EvtsLkg>
<CorpActnGnlInf>
<CorpActnEvtId>000</CorpActnEvtId>
<OffclCorpActnEvtId>US7</OffclCorpActnEvtId> …Run Code Online (Sandbox Code Playgroud) 我有一个关于如何在使用 Reactor 3 时清理调度程序工作线程的问题
Flux.range(1, 10000)
.publishOn(Schedulers.newElastic("Y"))
.doOnComplete(() -> {
// WHAT should one do to ensure the worker threads are cleaned up
logger.info("Shut down all Scheduler worker threads");
})
.subscribe(x -> logger.debug(x+ "**"));
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,我看到的是,一旦主线程完成运行,工作线程在一段时间内仍处于 WAITING 状态。
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1081)
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:748)
Run Code Online (Sandbox Code Playgroud)
有没有办法控制这个?也就是说,它们可以被处理掉onComplete()吗?我试过了Schedulers.shutdownNow(),但没有帮助。
另一方面,当我这样做时,我能够控制调度程序的处理。哪种是首选/提倡的方式?
reactor.core.scheduler.Scheduler s = Schedulers.newElastic("X");
Flux.range(1, 10000)
.concatWith(Flux.empty())
.publishOn(s)
.doOnComplete(() -> {
s.dispose();
logger.info("Shut down all Scheduler worker threads");
})
.subscribe(x -> logger.debug(x+ "**"));
Run Code Online (Sandbox Code Playgroud)