Как запросить Marklogic с помощью чувствительных к пунктуации терминов, используя JAVA?
У меня есть следующая информация, хранящаяся в Marklogic для файлов JSON следующим образом.
1.json>> "dateSubmitted" : "2017/10/11 09:15:14"
2.json>> "dateSubmitted" : "2017/10/11 10:13:14"
3.json>> "dateSubmitted" : "2017/10/14 11:12:13"
Мой запрос запрос:
String dateQuery = "2017/10/11";
Я попробовал 2 метода, и ни один, кажется, не работает.
Способ 1:
StructuredQueryBuilder qb = new StructuredQueryBuilder();
QueryDefinition queryDef = qb.and(qb.word((qb.jsonProperty("dateSubmitted"),dateQuery)));
queryDef.setDirectory(DIRECTORY);
SearchHandle resultsHandle = new SearchHandle();
queryManager.search(queryDef, resultsHandle, start);
Способ 2:
StructuredQueryBuilder qb = new StructuredQueryBuilder();
String[] wordQueryOptions = {"punctuation-sensitive", "space-sensitive"};
QueryDefinition queryDef = qb.and(qb.word((qb.jsonProperty("dateSubmitted"),
FragmentScope.DOCUMENTS,
wordQueryOptions,100.0,dateQuery)));
queryDef.setDirectory(DIRECTORY);
SearchHandle resultsHandle = new SearchHandle();
queryManager.search(queryDef, resultsHandle, start);
Ожидаемый результат - вернуть только 1.json и 2.json.
Однако 3.json также был возвращен.
Есть ли какие-то настройки, которые мне не хватает в моем администраторе Marklogic для активации параметров или чувствительных к пунктуации?
1 ответ
Работа с датами часто проще и эффективнее, если вы индексируете свойство как дату. Таким образом, вы можете делать до и после матчей на дату, а также сортировать по дате.
Чтобы проиндексировать свойство как дату, вы можете создать индекс диапазона по дате. Затем вы можете использовать запрос диапазона на дату.
В MarkLogic 9 вы также можете использовать TDE для проецирования строк из документов со столбцом для дат.
Надеюсь, что это помогает,