#marklogic #facet #bucket
#marklogic #фасет #сегмент
Вопрос:
Мне нужно настроить вычисляемые сегменты для ограничения возрастного диапазона человека, используя индекс для даты рождения. Указанные возрастные диапазоны представлены в виде 19-30, 31-40, 41-50 и т.д. Поскольку возможные значения привязки довольно ограничены, у меня возникают проблемы с настройкой этого. Например, если сегодня 2019-01-01, для возрастного диапазона 19-30 лет мне нужно указать даты рождения с 1988-01-02 (самому старшему 30 лет) по 2000-01-01 (самому молодому 19 лет). Как я могу настроить это вычисляемое ведро?
Для атрибута «lt», если я использую lt=»-P19Y», я получаю меньше, чем 2000-01-01, поэтому 1999-12-31 — это моя последняя включенная дата рождения, тем самым исключая тех, кому сегодня исполнилось 19.
И для атрибута «ge», если я использую ge=»-P31Y», я включаю дату рождения 1988-01-01, которая на один день выходит за пределы моего предполагаемого диапазона, т. Е. этому человеку только сегодня исполнился 31 год.
Если бы я мог использовать «завтра» и «вчера» в качестве якорей, эти значения работали бы. Или, если бы я мог указать значение, подобное для ge, которое означает «минус 31 год плюс 1 день», это тоже сработало бы. Но я не уверен, как заставить это работать, учитывая ограничения. Кто-нибудь настраивал ограничение возраста пользователя с помощью сегментов, используя индекс даты рождения?
TIA
Комментарии:
1. Я немного размышлял об этом, и я знаю, что в качестве опции привязки есть начало дня, но, насколько я знаю, нет конца дня. Я думаю, вам пришлось бы использовать пользовательское ограничение, которое вычисляет диапазоны сегментов «на лету». Не должно быть слишком сложным, но немного громоздким..
2. Спасибо @grtjn, похоже, чтобы быть полностью точным, необходимо пользовательское ограничение. Я бы подумал, что возрастные сегменты были бы обычным явлением… удивлен, что он не поддерживается лучше.
Ответ №1:
Я полагаю, что опция привязки «начало дня» для вычисляемых сегментов — это то, что вы ищете.
<constraint name="age">
<range type="xs:date">
<element name="birthdate"/>
<computed-bucket name="18" ge="-P18Y"
anchor="start-of-day">18 and under</computed-bucket>
<computed-bucket name="19-30" ge="P30Y" lt="-P18Y"
anchor="start-of-day">19 to 30</computed-bucket>
<computed-bucket name="31-40" ge="-P40Y" lt="-P30Y"
anchor="start-of-day">31 to 40</computed-bucket>
<computed-bucket name="41-50" ge="-P50Y" lt="-P40Y"
anchor="start-of-day">41 to 40</computed-bucket>
<computed-bucket name="51" lt="-P50Y"
anchor="start-of-day">51 and older</computed-bucket>
</range>
</constraint>
Документацию можно найти здесь:
http://docs.marklogic.com/guide/search-dev/search-api#id_22725
Редактировать: изначально атрибуты ge
и lt
были задом наперед для желаемых сегментов.
Комментарии:
1. Параметр edge отключен. привязка к концу дня дала бы правильные результаты, но это не поддерживается..