Skip to main content

Filter function based on related data

Here, we will introduce how to use the filter function to search for related data as a condition. By creating a filter in the format of :R(%module_name%:q|%filter_query%|), you can specify filtering conditions for related information, and you can search flexibly by combining keywords and tags.

info

:R() search can only be performed for the primary language. Please note that even if the Multi-language setting is enabled, the associated content will still be based on the primary language.

How to set up​

Preparation​

In order to narrow down related information, first set the modules that are allowed to be used with filter_request_allow_list. Write filter_request_allow_list in the following format.

:q|%module_name%:[%column_name1%,%column_name2%]

Example: :q|topics:[topics_group_id,subject] -> Allow to specify topics_group_id, subject in subquery.

You can also specify a subquery with :ALL like :q|tag:[:ALL]. For subqueries that can be specified, refer to Available items.

Image from Gyazo

Change in filtering conditions​

For Topics, Tag, and Inquiry, the default filtering conditions change according to the allow_list settings.

  • Topics, Tags
    • If the allow_list does not include open_flg, it searches only open content/tags.
    • If the allow_list includes open_flg (or :ALL), it searches including private contents/tags.
  • Inquiries
    • If the allow_list does not include status, it searches only active forms.
    • If the allow_list includes status (or :ALL), it searches including inactive forms.

Example of filter specification​

Get the tag associated with the contents of topics_group_id=1 using Tag::list API​

filter: :R(topics:q|topics_group_id eq 1|)
filter_request_allow_list: :q|topics:[topics_group_id]
Image from Gyazo

Get the content associated with the tag with tag_id=50 using the Topics::list API​

filter: :R(tag:q|tag_id in [50]|)
filter_request_allow_list: :q|tag:[tag_id]
Image from Gyazo

Perform an AND search with a keyword and tag using the Topics::list API​

filter: search_keyword contains "test" AND :R(tag:q|tag_id in [50]|)
filter_request_allow_list:[search_keyword,:q|tag:[tag_id]]
Image from Gyazo

Perform an OR search within a specific tag using the Topics::list API, and then perform an AND search for each of the results.​

filter: :R(tag:q|tag_id in [7,8,9]|) AND :R(tag:q|tag_id in [5,6]|)
filter_request_allow_list: :q|tag:[tag_id] Image from Gyazo

Get the content without tags set in the Topics::list API​

filter: :R(tag:empty)

Image from Gyazo

Retrieve tags associated with content where topics_group_id=1,2, ext_1="val", and checkbox="1" using the Tag::list API​

filter: :R(topics[topics_group_id=1,2]:q|ext_1 = "val" AND checkbox = "1"|)
filter_request_allow_list: :q|topics[topics_group_id=1,2]:[ext_1,ext_2,text,checkbox]

Image from Gyazo

Notes​

When filtering based on the extended fields of related content, you can specify the content definition ID as topics_group_id=1 or in a shortened form as 1. However, you must ensure that the parameters specified within the brackets in allow_list and filter match.

  • Working patterns
    • filter_request_allow_list: topics[topics_group_id=1]
    • filter: topics[topics_group_id=1]
  • Non-working pattern (1)
    • filter_request_allow_list: topics[topics_group_id=1]
    • filter: topics[1]
  • Non-working pattern (2)
    • filter_request_allow_list: topics[1,2]
    • filter: topics[2,1]

Available items​

Currently, only a limited number of standard fields can be specified in subqueries.
The available module_name and its subqueries (column_name) are as follows.

Topics​

topics_id
topics_group_id
contents_type
subject
open_flg
topics_flg
regular_flg
inst_ymdhi
update_ymdhi
ext_x(slug)

Member​

member_id
group_ids
inst_ymdhi
update_ymdhi

Inquiry​

inquiry_id
inquiry_name
status
inst_ymdhi
update_ymdhi

Tag​

tag_id
tag_nm
open_flg
inst_ymdhi
update_ymdhi
tag_category_id
ext_col_01
ext_col_02
ext_col_03
ext_col_04
ext_col_05
ext_col_06
ext_col_07
ext_col_08
ext_col_09
ext_col_10


Support

If you have any other questions, please contact us or check out Our Slack Community.