AI SearchでComplexTypeのサブフィールドを検索する
やりたいこと
searchFields
でComplexType
のサブフィールドを指定して検索したい。
searchFieldsとは
searchFields
は、AI Seachの検索クエリのパラメータ。
フルテキスト検索でどのフィールドに対して検索をかけるか指定できる。
The comma-separated list of field names to which to scope the full-text search. When using fielded search (fieldName:searchExpression) in a full Lucene query, the field names of each fielded search expression take precedence over any field names listed in this parameter.
前提条件
検索対象のインデックスの定義は以下の通り。
aaa
は Edm.ComplexType
で、中に bbb
ccc
ddd
というサブフィールドがあり、型はいずれも EDM.String
となっている。
{
"name": "hoge",
"fields": [
{ "name": "id", "type": "Edm.String", "key": true, "filterable": true },
{ "name": "url", "type": "Edm.String", "searchable": true, "filterable": false },
{ "name": "filepath", "type": "Edm.String", "searchable": true, "filterable": false},
{ "name": "aaa", "type": "Edm.ComplexType",
"fields": [
{ "name": "bbb", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false, "searchable": true },
{ "name": "ccc", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false, "searchable": true },
{ "name": "ddd", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false, "searchable": true }
]
}
]
}
結論
"searchFields":"{ComplexTypeの項目名}/{サブフィールドの項目名}"
と書く。
Luceneの構文でも同様。
"search":"{ComplexTypeの項目名}/{サブフィールドの項目名}:{検索ワード}"
やったこと
aaa
のサブフィールドbbb
が"XXX"なものを検索しようとして以下のクエリを投げたら
{
"search": "XXX",
"queryType": "full",
"searchFields": "bbb"
}
bbb
というフィールドはない、とエラーが出た。
"Unknown field 'bbb' in search field list.\r\nParameter name: searchFields"
aaa.bbb
aaa["bbb"]
に変えて試したが同様のエラー。
調べたら、以下のドキュメントにサブフィールドを指定して検索する方法が書いてあった。
フィールドとサブフィールドを /
で区切ればいいそう。
{
"search": "XXX",
"queryType": "full",
"searchFields": "aaa/bbb"
}
以上、少しつまずいたので共有でした。
Discussion