【问题标题】:marklogic search by date field in java在java中按日期字段进行marklogic搜索
【发布时间】:2018-01-29 09:57:51
【问题描述】:

我有一个 CustomPojo,其中有一个日期字段(testDate)。现在我想根据该日期字段的日期范围搜索这个 CustomPojo。我试图通过以下方式实现它,但不幸的是它不是过滤数据而是返回所有 pojo。请有任何建议。

*PojoRepository<CustomPojo, Long> customPojoRepo= getDbClient()
            .newPojoRepository(CustomPojo.class, Long.class);
PojoQueryBuilder<CustomPojo> qb = customPojoRepo.getQueryBuilder();
StructuredQueryDefinition sqdef=
             qb.and(qb.range("testDate", PojoQueryBuilder.Operator.GE, startCal.getTime()),
             qb.range("testDate", PojoQueryBuilder.Operator.LE, endCal.getTime()));
PojoPage<CustomPojo> matchingObjs =
customPojoRepo.search(sqdef,
                    start);*

谢谢, 贾根

【问题讨论】:

标签: marklogic marklogic-8 marklogic-9 marklogic-7 marklogic-dhf


【解决方案1】:

您能否发布 CustomPojo 的定义,以及存储在 db.json 中的 JSON 文档示例。 PojoRepository 的定义(如文档所述)旨在用于简单的 CRUD 方法,特别是从 Pojo 到 JSON 的确切序列化(数据映射)是未定义的。使用查询您需要知道字段的 序列化 名称,因为 ML 对 java 一无所知。还键入了范围索引,没有范围索引的定义、Pojo、JSON 和 endCal.getTime() 无法确定您最可能遇到的问题。

【讨论】:

  • 请在下面找到 customPojoa 和示例 json。 public class CustomPojo{ @Id public Long id; @JsonTypeInfo(use=JsonTypeInfo.Id.NONE, include=JsonTypeInfo.As.EXTERNAL_PROPERTY) 公共日期 testDate; public Long getId() { return id; } public void setId(Long id) { this.id = id; } 公共日期 getTestDate() { 返回 this.testDate; } 公共无效 setTestDate(日期 testDate) { this.testDate= testDate; } } json 数据 { "com.test.repository.ml.pojo.CustomPojo": { "id": 1, "title": "LIFE", "testDate": "2017-02-05T20:00:00.000Z" }
【解决方案2】:

我知道这并不能直接回答您的问题,但请注意,在 PojoFacadeTest.java 中有一个工作示例可以对日期进行范围查询,它使用 TimeTest 作为 Pojo。为了支持这个bootstrap.xqy (which is run as a prerequisite to unit tests) 创建了三个日期时间范围索引:

  • com.marklogic.client.test.TimeTest/calendarTest
  • com.marklogic.client.test.TimeTest/calendarTestCet
  • com.marklogic.client.test.TimeTest/dateTest

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多