如何在 MarkLogic 中使用 JavaScript 计算来自同一集合中满足两个搜索条件的文档的出现次数?

问题描述

我有一个包含数百万个文档并跨越数年的大型数据集。

在 MarkLogic(在查询控制台中首选)中,使用 JavaScript,我想从 package webscrape; /* * To change this license header,choose License Headers in Project Properties. * To change this template file,choose Tools | Templates * and open the template in the editor. */ /** * * @author glass */ public class HackerNewsItem { private String title; private String url; private String author; private int score; private int position; private int id; public HackerNewsItem(String title,String url,String author,int score,int position,int id) { this.title = title; this.url = url; this.author = author; this.score = score; this.position =position; this.id = id; } } 从 {{1 }} 到 Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/xerces/xni/XNIException at com.gargoylesoftware.htmlunit.DefaultPageCreator.<clinit>(DefaultPageCreator.java:91) at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:187) at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:269) at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:259) at com.gargoylesoftware.htmlunit.WebClient.<init>(WebClient.java:251) at webscrape.JsoupTutorial.<init>(JsoupTutorial.java:31) at webscrape.JsoupTutorial$2.run(JsoupTutorial.java:190) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) at java.base/java.security.AccessController.doPrivileged(AccessController.java:391) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740) at java.desktop/java.awt.EventdispatchThread.pumpOneEventForFilters(EventdispatchThread.java:203) at java.desktop/java.awt.EventdispatchThread.pumpEventsForFilter(EventdispatchThread.java:124) at java.desktop/java.awt.EventdispatchThread.pumpEventsForHierarchy(EventdispatchThread.java:113) at java.desktop/java.awt.EventdispatchThread.pumpEvents(EventdispatchThread.java:109) at java.desktop/java.awt.EventdispatchThread.pumpEvents(EventdispatchThread.java:101) at java.desktop/java.awt.EventdispatchThread.run(EventdispatchThread.java:90) Caused by: java.lang.classNotFoundException: org.apache.xerces.xni.XNIException at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) at java.base/java.lang.classLoader.loadClass(ClassLoader.java:519) ... 20 more BUILD SUCCESSFUL (total time: 1 second) 在 2020 年到 2021 年之间。

示例文档结构(集合 = 'members'):

memberIDs

对于这个例子,答案是“2”。

我在“Indexing in MarkLogic”下的文档中找到了一个可能的解决方案,称为“shotgun 查询”。

我也在这里Search Documents from two collections in MarkLogic发现了一个类似的问题。但是,我不知道 XQuery,所以我不知道如何使它适应我的情况。

我的第一个想法是分别执行这两个查询,填充两个数组并确定哪些 ID 显示在两个数组中。但是,由于较大的查询会产生超过 20 万个文档,因此计算时间仍然太长。

我可以通过使用子序列来克服这个障碍。 每次检索少量 URI,然后遍历 URI,从文档中检索我需要的值,并将它们添加到数组中。 可悲的是,我的方法并没有真正奏效。此外,我正在创建的副产品本身可能是一个问题。 二十万个文档意味着我必须存储在 40 万个字符串的数组中。 到目前为止,我有这个,它没有中断,但我在 15 秒后停止运行。

secondaryIDs

sql 中,我可能会在两个查询结果之间进行 INNER JOIN 来解决这个问题。 我可以使用 JavaScript API 在 MarkLogic 中做到这一点吗?

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...