Xquery 使用MarkLogic Java API与QConsole时,通配符搜索未按预期工作

Xquery 使用MarkLogic Java API与QConsole时,通配符搜索未按预期工作,xquery,wildcard,marklogic,Xquery,Wildcard,Marklogic,尝试编写一个查询,返回2019-12-10购买的特斯拉Modal 3(忽略时间戳),但在QConsole和Java Api中运行通配符搜索时得到不同的结果。仅供参考,启用了尾随通配符搜索和尾随通配符词位置索引 鉴于以下数据 [ { "com.dealership.luckyAuto.carTransactions": { "carName": "Tesla", "carModal": "3", "buyer": "Bob", "purc

尝试编写一个查询,返回2019-12-10购买的特斯拉Modal 3(忽略时间戳),但在QConsole和Java Api中运行通配符搜索时得到不同的结果。仅供参考,启用了尾随通配符搜索和尾随通配符词位置索引

鉴于以下数据

[
  {
    "com.dealership.luckyAuto.carTransactions": {
      "carName": "Tesla",
      "carModal": "3",
      "buyer": "Bob",
      "purchasedDate": "2017-04-26T22:00:00.000Z"
    }
  },
  {
    "com.dealership.luckyAuto.carTransactions": {
      "carName": "Tesla",
      "carModal": "X",
      "buyer": "Ted",
      "purchasedDate": "2015-04-26T03:00:00.000Z"
    }
  },
  {
    "com.dealership.luckyAuto.carTransactions": {
      "carName": "Tesla",
      "carModal": "Y",
      "buyer": "Carol",
      "purchasedDate": "2016-04-26T10:00:00.000Z"
    }
  },
  {
    "com.dealership.luckyAuto.carTransactions": {
      "carName": "Audi",
      "carModal": "Q3",
      "buyer": "Alice",
      "purchasedDate": "2015-04-26T00:00:00.000Z"
    }
  },
  {
    "com.dealership.luckyAuto.carTransactions": {
      "carName": "Audi",
      "carModal": "Q4",
      "buyer": "Lori",
      "purchasedDate": "2016-04-26T00:00:00.000Z"
    }
  },
  {
    "com.dealership.luckyAuto.carTransactions": {
      "carName": "Audi",
      "carModal": "Q5",
      "buyer": "Alax",
      "purchasedDate": "2018-04-26T00:00:00.000Z"
    }
  }
]
在QConsole中执行以下查询时,结果为0。(预计)

但当执行以下struturedQuery时,结果是(仅在carName和carModal上匹配。忽略通配符purchasedDate字段)

StruturedQuery:

StructuredQueryBuilder().run {
and(
    value(jsonProperty("carName"), "Tesla"),
    value(jsonProperty("carModal"), "3"),
    value(
            jsonProperty("purchasedDate"),
            StructuredQueryBuilder.FragmentScope.DOCUMENTS,
            arrayOf("wildcarded"),
            1.0,
            "2019-12-10T*"
        )
    )}
序列化查询:

<query xmlns="http://marklogic.com/appservices/search">
    <and-query>
        <value-query type="string">
            <json-property>carName</json-property>
            <text>Tesla</text>
        </value-query>
        <value-query type="string">
            <json-property>carModal</json-property>
            <text>3</text>
        </value-query>
        <value-query type="string">
            <json-property>purchasedDate</json-property>
            <fragment-scope>documents</fragment-scope>
            <text>2019-12-10T*</text>
            <term-option>wildcarded</term-option>
            <weight>1.0</weight>
        </value-query>
    </and-query>
</query>

卡纳姆
特斯拉
卡莫达尔
3.
购买日期
文件
2019-12-10吨*
通配符
1

可能是因为cts:search在默认情况下是过滤的,而Java不是,所以搜索消除了误报,而Java没有。尝试将搜索设置为“未过滤”,您可能会得到与Java相同的结果。正确的解决方案是使查询和索引匹配,这样就不需要过滤来保证准确性。请提供示例文档,这样我们可以有更多的了解。@DavidEnnis将图像转换为有问题的文档。Footnoting Hunter先生的建议,数据库是否具有支持未筛选通配符的适当索引?见@ehennum我已经看过了那份文件。启用了尾随通配符搜索和尾随通配符词索引,但仍然没有帮助。
StructuredQueryBuilder().run {
and(
    value(jsonProperty("carName"), "Tesla"),
    value(jsonProperty("carModal"), "3"),
    value(
            jsonProperty("purchasedDate"),
            StructuredQueryBuilder.FragmentScope.DOCUMENTS,
            arrayOf("wildcarded"),
            1.0,
            "2019-12-10T*"
        )
    )}
<query xmlns="http://marklogic.com/appservices/search">
    <and-query>
        <value-query type="string">
            <json-property>carName</json-property>
            <text>Tesla</text>
        </value-query>
        <value-query type="string">
            <json-property>carModal</json-property>
            <text>3</text>
        </value-query>
        <value-query type="string">
            <json-property>purchasedDate</json-property>
            <fragment-scope>documents</fragment-scope>
            <text>2019-12-10T*</text>
            <term-option>wildcarded</term-option>
            <weight>1.0</weight>
        </value-query>
    </and-query>
</query>