Lucene索引:查询时得到空结果

2024-04-13

我正在尝试使用 Lucene 索引进行查询,但在日志中得到空结果和以下错误,

Traversal query (query without index): select [jcr:path] from [nt:base] where isdescendantnode('/test') and name='World'; consider creating an index


[async] The index update failed
org.apache.jackrabbit.oak.api.CommitFailedException: OakAsync0002: Missing index provider detected for type [counter] on index [/oak:index/counter]


我正在使用 RDB DocumentStore 并且我已经检查了在节点表中创建的索引和节点。我尝试了下面的代码,

   @Autowired 
   NodeStore rdbNodeStore;

   //create reposiotory
   LuceneIndexProvider provider = new LuceneIndexProvider();
   ContentRepository repository = new Oak(rdbNodeStore)
                .with(new OpenSecurityProvider())
                .with(new InitialContent())
                .with((QueryIndexProvider) provider)
                .with((Observer) provider)
                .with(new LuceneIndexEditorProvider())
                .withAsyncIndexing("async", 
   5).createContentRepository();

    //login reposiotory and retrive session
    ContentSession contentSession = repository.login(null, null);
    Root root = contentSession.getLatestRoot();

    //create lucene index
      Tree index = root.getTree("/");

      Tree t = index.addChild("oak:index");

      t = t.addChild("lucene");
      t.setProperty("jcr:primaryType", "oak:QueryIndexDefinition", Type.NAME);
      t.setProperty("compatVersion", Long.valueOf(2L), Type.LONG);
      t.setProperty("type", "lucene", Type.STRING);
      t.setProperty("async", "async", Type.STRING);

      t = t.addChild("indexRules");
      t = t.addChild("nt:base");
      Tree propnode = t.addChild("properties");
      Tree t1 = propnode.addChild("name");
      t1.setProperty("name", "name");
      t1.setProperty("propertyIndex", Boolean.valueOf(true), Type.BOOLEAN);
      root.commit();

      //Create TestNode
      String h = "Hello" + System.currentTimeMillis();
      String w = "World" + System.currentTimeMillis();

      Tree test = root.getTree("/").addChild("test");
      test.addChild("a").setProperty("name", Arrays.asList(new String[] { h, w }), Type.STRINGS);
      test.addChild("b").setProperty("name", h);
      root.commit();

      //Search
      String query = "select [jcr:path] from [nt:base] where isdescendantnode('/test') and name='World' option(traversal ok)";

      List<String> paths = executeQuery(root, query, "JCR-SQL2", true, false);
      for (String path : paths) {
        System.out.println("Path=" + path);
      }

谁能分享一些关于如何创建 Lucene 索引的示例代码吗?


您可能正在做的事情存在几个问题。首先是您观察到的错误。既然你正在使用InitialContent其中规定了一个索引type="counter"。为此你需要有.with(new NodeCounterEditorProvider())在构建存储库时。这应该可以避免您看到的错误。

但是,您的代码可能仍然无法工作,因为 lucene 索引是异步的(您已正确配置)。由于这种异步行为,您无法在添加节点后立即查询。 我尝试了你的代码,但必须添加类似的内容Thread.sleep(10*1000)在去查询之前。

作为另一个旁注,我建议您尝试一下IndexDefinitionBuilder制作lucene索引结构。所以,你可以替换 树索引 = root.getTree("/");

Tree t = index.addChild("oak:index");

t = t.addChild("lucene");
t.setProperty("jcr:primaryType", "oak:QueryIndexDefinition", Type.NAME);
t.setProperty("compatVersion", Long.valueOf(2L), Type.LONG);
t.setProperty("type", "lucene", Type.STRING);
t.setProperty("async", "async", Type.STRING);

t = t.addChild("indexRules");
t = t.addChild("nt:base");
Tree propnode = t.addChild("properties");
Tree t1 = propnode.addChild("name");
t1.setProperty("name", "name");
t1.setProperty("propertyIndex", Boolean.valueOf(true), Type.BOOLEAN);
root.commit();

with

IndexDefinitionBuilder idxBuilder = new IndexDefinitionBuilder();
idxBuilder.indexRule("nt:base").property("name").propertyIndex();
idxBuilder.build(root.getTree("/").addChild("oak:index").addChild("lucene"));
root.commit();

在我看来,后一种方法更不容易出错并且更可重复。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lucene索引:查询时得到空结果 的相关文章

  • 如何在 Groovy 中的 JSON Converter 方法中保留字母大小写?

    我正在尝试将 groovy 对象解析为 JSON 属性名称不遵循正确的驼峰式大小写形式 class Client String Name Date Birthdate 当我使用这个时 Client client new Client Nam
  • 如何检查字符串是否具有特定模式[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 用户输入任意字符串 程序会区分该字符
  • @NotNull.List 的目的

    当我查看标准时限制条件 http docs oracle com javaee 6 api javax validation constraints package summary html在 Bean Validation API JSR
  • Java 中的本机方法

    我花了一些时间学习什么是 Java Native 方法以及它们是在平台相关代码 主要是 C 中实现的 但是我在哪里可以找到这些 Java 的本机实现呢 例如 Thread 类的 sleep long millis 方法是本机的 但它的实现代
  • 将二进制数据的 byte[] 转换为 String

    我有二进制格式的数据 hex 80 3b c8 87 0a 89 我需要将其转换为字符串 以便通过 Jackcess 将二进制数据保存在 MS Access 数据库中 我知道 我不打算在 Java 中使用 String 来存储二进制数据 但
  • 在 JSP 中对表单操作使用相对路径

    如何在表单操作中使用相对路径
  • 首选项活动中的广告“没有足够的空间来显示广告!需要:<480, 75>,拥有:<432, 1073741823>”

    我试图在偏好活动中展示广告 但它从未出现 Logcat 始终显示消息 没有足够的空间来显示广告 想要 有 这就是我制作广告的方式 我对广告有自定义偏好 public class AdmobPreference extends Prefere
  • Java 将字节转换为二进制安全字符串

    我有一些以字节为单位的数据 我想将它们放入Redis中 但是Redis只接受二进制安全字符串 而我的数据有一些二进制非安全字节 那么如何将这些字节转换为二进制安全字符串以便将它们保存到 Redis 中呢 Base64 对我有用 但它使数据更
  • 可以混合使用 JVM 语言吗?即:Groovy 和 Clojure

    我知道你可以轻松地混合groovy java clojure java 无论什么JvmLang java 这是否也意味着我也可以让 clojure 和 groovy 代码进行交互 如果我使用 Grails 或 jRoR 我也可以在该环境中使
  • org.hibernate.MappingException:没有 JDBC 类型的方言映射:1111

    我使用的是 postgres v8 3 它的列类型为 XML DDL 看起来像这样 CREATE TABLE contact ID INTEGER NOT NULL NAME VARCHAR NOT NULL Details XML 在映射
  • 使用antlr4获取预处理器行并解析C代码

    我正在使用 Antlr4 来解析 C 代码 并使用以下语法来解析 链接到 C g4 https github com antlr grammars v4 blob master c C g4 上面的语法默认不提供任何解析规则来获取预处理器语
  • 在 Java 中打开现有文件并关闭它。

    是否可以在java中打开一个文件附加数据并关闭多次 例如 psuedocode class variable declaration FileWriter writer1 new FileWriter filename fn1 writer
  • JSP 作为电子邮件模板

    有没有办法发送 MIME 电子邮件 其中电子邮件正文源自 JSP 我需要使用 Javamail 发送一封电子邮件 其中包含一个表格 我认为如果我可以使用 JSP 来完成所有格式设置和布局 将会很方便 在这个线程中 Java 电子邮件模板的建
  • 日志记录在 Android 设备上实际上有什么作用?

    我一直在 Android 示例中看到这样的代码 try catch Exception e Log e Error e getMessage 什么是Log e实际上在物理设备上做什么 它进入系统日志 开发人员可以通过 SDK 工具访问该日志
  • Spring Boot如何加入自定义查询

    我需要创建一个端点 该端点按州返回人口普查数据以及城市列表 我目前使用两个端点来获取此数据 目前回应 自定义查询一 censusByState id 1 code 11 name Rond nia statePopulation 18152
  • 在 Java 服务器中验证 Windows 用户

    我正在开发一个用 Java 编写的服务器和一个在同一网络上的 Windows 计算机上运行的客户端 用 Net 编写的桌面应用程序 我希望进行一些基本身份验证 以便服务器可以确定运行客户端的用户的用户名 而不需要用户在客户端中重新输入其 W
  • 如果所有类不在同一个包中,Spring @autowired 不起作用

    我有四个包裹 com spring org Files HomeController java com spring org dao Files SubscriberDao java SubscriberDaoImpl java com s
  • 如何正确使用Google Calendar API Events.Insert命令?

    所以我一直使用REST方法来调用Google的API 我需要将事件插入到我拥有 ID 的特定日历中 这是我发送的 POST 请求 地址 https www googleapis com calendar v3 calendars https
  • 按字母顺序对对象的 ArrayList 进行排序

    我必须创建一个方法来排序数组列表根据电子邮件按字母顺序排列对象 然后打印排序后的数组 我在排序时遇到麻烦的部分 我已经研究过并尝试使用Collections sort vehiclearray 但这对我不起作用 我是因为我需要一个叫做比较器
  • 在Java的System.out中以表格格式输出

    我正在从数据库获取结果 并希望将数据作为 Java 标准输出中的表输出 我尝试过使用 t 但我想要的第一列的长度变化很大 有没有办法将其显示在类似输出的漂亮表格中 Use System out format http java sun co

随机推荐

  • 如何从 jenkins UI 控制台本身下载构建输出文件

    我是新詹金斯 使用詹金斯1 651 3战争部署于Tomcat6有没有办法从 jenkins UI 控制台本身下载 Jenkins 作业的输出文件 我的作业生成了一个 jar 文件 那么 有人可以建议我是否有任何方法或插件可以使每个 Jenk
  • iPad、JavaScript 字符代码和 shiftKey

    假设我有一个 Web 应用程序 每次用户在 ID 为 txt 的文本区域中按下按键时 该应用程序都会调用以下 jQuery txt keydown function e console log e which shows the keyCo
  • sqlite 相当于 row_number() over ( 分区 ...?

    我想知道是否可以使用单个 sqlite 语句执行以下操作 我的桌子看起来像这样 AnId UserId SomeDate SomeData 123 A 1 1 2010 aadsljvs 87 A 2 9 2010 asda fas 193
  • 将java类文件转换为kotlin会导致编译错误

    我有一个 java 类文件 可以正常工作 但是如果我将其转换为 Kotlin 则会出现一些问题 这是一个Java版本 public class CallbackWrapper
  • 如何在数学中为给定旋转轴的 3D 绘图制作动画

    如果给定标准化旋转轴 例如 1 Sqrt 3 1 Sqrt 3 1 Sqrt 3 和 3d 图 例如 z x y Exp Sqrt x 2 y 2 Power 4 3 1 Power 4 3 1 Sqrt 1 2 Sqrt x 2 y 2
  • 为什么活性/就绪性探测失败?

    我正在尝试通过 Helm 图表将应用程序部署到 Kubernetes 集群 每次我尝试部署应用程序时 我都会得到 活性探测失败 获取http 172 17 0 7 80 http 172 17 0 7 80 拨号 TCP 172 17 0
  • 为什么我的 Firebase 推送通知单个项目的打开率总是显示零计数?

    从上图可以看出 所有推送通知始终显示零打开率 尽管我非常确定至少有 1 会打开推送通知 我想跟踪一天内每条发送消息的打开率 但如果从 Firebase 控制台打开基于当天的总体报告 它将跟踪一天内发送的所有消息的打开率 如下图所示 那么为什
  • FTP 错误 530 用户无法登录

    我正在尝试通过 FTP 访问我使用 Windows Server Web 64 位 版本的 IIS 7 0 设置的新 FTP 站点 但是当我尝试登录该网站时出现上述错误 但我可以登录到我的其他 FTP 站点 另外 当我从 IIS 管理器中选
  • 在 Core Graphics 中创建一个具有多色段的圆

    我正在尝试绘制一个饼图 该饼图由大小相等的部分组成 每个部分具有不同的颜色 我的代码基于此SO 在SWIFT中画一个圆弧段进度 https stackoverflow com questions 31807846 draw a circul
  • Indy10 + OpenSSL:发送电子邮件代码在 Windows 8 上停止工作

    代码在 Windows 8 上停止运行 它在 Windows7 Windows XP 上运行良好 我找到了解决此问题的方法 以 Windows 兼容模式启动应用程序 Windows XP Service Pack 3 代码工作 如果 Win
  • 使用 KL 散度时,变分自动编码器为每个输入 mnist 图像提供相同的输出图像

    当不使用 KL 散度项时 VAE 几乎完美地重建 mnist 图像 但在提供随机噪声时无法正确生成新图像 当使用 KL 散度项时 VAE 在重建和生成图像时都会给出相同的奇怪输出 这是损失函数的 pytorch 代码 def loss fu
  • 有没有好的 x86 双精度小矩阵 SIMD 库?

    我正在寻找一个专注于图形小型 4x4 矩阵运算的 SIMD 库 那里有很多单精度 但我需要支持单精度和双精度 我看过 Intel 的 IPP MX 库 但我更喜欢带有源代码的库 我对这些特定操作的 SSE3 实现非常感兴趣 垫4 垫4 Ma
  • “纯”MVVM 中的 MenuItem 键盘快捷键?

    我在 wpf 中使用的所有菜单 上下文菜单 工具栏都在 ViewModel 代码中声明 非常像这样 MenuService Add new MenuItem Header DoStuff Command new relayCommand D
  • 如何检查Android中的颜色亮度?

    如何在android中检查亮度 我有一个整数值的颜色 我想根据颜色的整数值检查该颜色是深色还是浅色 if checkColor Color RED checkColor Color BLACK set fore color is white
  • 如何将js对象转换为点表示法字符串

    我有一个像这样的 JavaScript 普通对象 a b 1 我想将其转换为点符号字符串 如下所示a b 1 用例 将对象发送到纯文本环境 例如 cli 或作为 url 参数 很难判断这是否是您想要的 但是这样的东西会将对象树扁平化为点路径
  • UISegmentedControl 不更新视图

    我正在 Xcode 5 中构建一个应用程序 并且遇到了一些奇怪的行为UISegmentedControl 首先是我正在构建的应用程序的一些信息 我正在构建一个应用程序 我希望允许用户在注册公司订购产品 作为一项额外服务 我希望允许他们查看他
  • Xcode 6.1 中的 segue 操作列表中没有“显示”

    我是 swift 和 IOS 开发的新手 系统信息 Xcode 6 1 发行说明 操作系统 X 10 10 1 我的应用程序有两个视图控制器 ViewA 和 ViewB 无导航控制器 我想通过单击 ViewA 中的 UIButton 从 V
  • NSDictionary 对比NSArray

    我正在阅读 Objective C 一本书呆子牧场的书 我不禁思考这个问题 我如何决定使用哪种集合类型 NSArray 或 NSDictionary 都带有或不带有可变子类 从 URL 读取内容时 假设我正在从 PHP 脚本读取 JSON
  • 如何在 Safari Web Inspector 中应用样式规则?

    Chrome 开发者工具允许您在 样式 窗格中应用样式规则 我还没有找到在 Safari 样式规则 窗格 中执行此操作的方法 有人知道是否可能吗 另外 Safari 是否有像 Chrome 那样的标尺 OS X 上的 Safari 8 0
  • Lucene索引:查询时得到空结果

    我正在尝试使用 Lucene 索引进行查询 但在日志中得到空结果和以下错误 Traversal query query without index select jcr path from nt base where isdescendan