Поиск с подстановочными символами не работает должным образом с использованием MarkLogi c Java API против QConsole - PullRequest
3 голосов
/ 26 января 2020

Попытка написать запрос, который вернул бы Tesla Modal 3, купленные в 2019-12-10 (без учета метки времени), но получить другие результаты при выполнении поиска по шаблону в 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, (Ожидается)

cts.search(
    cts.andQuery([
    cts.collectionQuery("com.dealership.luckyAuto.carTransactions"),
    cts.jsonPropertyValueQuery("carName", "Tesla"),
          cts.jsonPropertyValueQuery("carModal", "3"),
          cts.jsonPropertyValueQuery("purchasedDate", "2019-12-10T*", ("wildcarded"))
    ]
    ) 
)

Но при выполнении ниже struturedQuery результатом является (Соответствует только для carName и carModal. Подстановочные знаки приобрелиДата игнорируется)

Tesla   3   Bob     2015-03-23T00:00:00.000+0000
Tesla   3   Jeff    2017-03-21T00:00:00.000+0000

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>
...