---
title: 関連しているデータを条件にしたfilter機能
description: ここではfilter機能で、関連しているデータを条件にして検索をする方法を紹介します。`:R(%module_name%:q|%filter_query%|)`の形式でフィルターを作成することで、関連情報に対する絞り込み条件を指定できるほか、キーワードとタグを組み合わせて検索するなど、柔軟な検索ができます。
---

ここではfilter機能で、関連しているデータを条件にして検索をする方法を紹介します。  
`:R(%module_name%:q|%filter_query%|)`の形式でフィルターを作成することで、  
関連情報に対する絞り込み条件を指定できるほか、キーワードとタグを組み合わせて検索するなど、柔軟な検索ができます。

:::info
:R()検索は主言語に対してのみ実行可能です。多言語設定を有効にしていても紐づくコンテンツは主言語が元になりますのでご注意ください。
:::

## 設定方法
### 事前準備
関連情報に対する絞り込みを行うためには、まず`filter_request_allow_list`で利用を許可するモジュールを設定します。  
以下の形式で`filter_request_allow_list`を記述します。  

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

例：`:q|topics:[topics_group_id,subject]`  
-> サブクエリに topics_group_id, subject の指定を許可。

コンテンツの拡張項目をサブクエリに指定する場合は、コンテンツ定義IDも指定してください。

例：`:q|topics[topics_group_id=10]:[ext_1,relation]`  
-> サブクエリにコンテンツの拡張項目 ext_1, relation の指定を許可。

また、`:q|tag:[:ALL]`のようにサブクエリを`:ALL`で指定も可能です。  
指定できるサブクエリは[利用できる項目](#利用できる項目)を参照してください。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/0c8768a58aae9ed73ad790be0719e63a.png)

#### 絞り込み条件の変化
Topics, Tag, Inquiryは、allow_listの設定内容に応じてデフォルトの絞り込み条件が変化します。  
- Topics, Tag  
    - allow_listにopen_flgを含まない場合、公開状態のコンテンツ/タグのみが検索対象になります。  
    - allow_listにopen_flg(または:ALL)を含む場合、非公開のコンテンツ/タグも含めて検索対象になります。
- Inquiry
    - allow_listにstatusを含まない場合、運用中のフォームのみが検索対象になります。
    - allow_listにstatus(または:ALL)を含む場合、休止中のフォームも含めて検索対象になります。


### フィルター指定例
#### Tag::listのAPIでtopics_group_id=1 のコンテンツに紐付くタグを取得
`filter`: `:R(topics:q|topics_group_id eq 1|)`  
`filter_request_allow_list`: `:q|topics:[topics_group_id]`  
![Image from Gyazo](https://t.gyazo.com/teams/diverta/a228332196dc900e20b4f18e6a1bcbbf.png)

#### Topics::listのAPIでtag_id=50 のタグに紐付くコンテンツを取得
`filter`: `:R(tag:q|tag_id in [50]|)`  
`filter_request_allow_list`: `:q|tag:[tag_id]`  
![Image from Gyazo](https://t.gyazo.com/teams/diverta/ab3ff88f6033bb89ee29b550cf81842c.jpg)

#### Topics::listのAPIでキーワードとタグでAND検索
`filter`: `search_keyword contains "テスト" AND :R(tag:q|tag_id in [50]|)`  
`filter_request_allow_list`:`[search_keyword,:q|tag:[tag_id]]`  
![Image from Gyazo](https://t.gyazo.com/teams/diverta/52454de0102cab6d1842238a10808784.jpg)

#### Topics::listのAPIで特定のタグ内でOR検索をし、それぞれをAND検索する
`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](https://t.gyazo.com/teams/diverta/9e3d5407acc69992bf2e948f91f36db3.jpg)

#### Topics::listのAPIでタグが設定されていないコンテンツを取得
`filter`: `:R(tag:empty)`

![Image from Gyazo](https://t.gyazo.com/teams/diverta/acf8be256a14e699dc221c3221dc6476.png)

#### Tag::listのAPIで、topics_group_id=1,2、ext_1="val"、checkbox="1" のコンテンツに紐付くタグを取得

:::caution
サブクエリに拡張項目(ext_X)を指定する場合はコンテンツ定義IDも指定してください。
:::

`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](https://t.gyazo.com/teams/diverta/a8f173bb70eb9a0a16891479caf08cd1.png)

#### 注意事項
関連したコンテンツの拡張項目で絞込みを行う場合、コンテンツ定義IDは`topics_group_id=1`の指定の他、`1`のように省略して書くことができますが、allow_listとfilterで[]内に指定するパラメータを一致させる必要があります。

- 動作するパターン
  - filter_request_allow_list: topics[`topics_group_id=1`]
  - filter: topics[`topics_group_id=1`]
- 動作しないパターン(1)
  - filter_request_allow_list: topics[`topics_group_id=1`]
  - filter: topics[`1`]
- 動作しないパターン(2)
  - filter_request_allow_list: topics[`1,2`]
  - filter: topics[`2,1`]

## 利用できる項目
利用できる`module_name`とそのサブクエリ(`column_name`)は以下となります。  

### 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`  