Apache Solrのmanaged-schema.xmlにおいて、フィールドをdynamicFieldで設定すると、フィールド名に柔軟性を持たせる事ができます。具体例で説明しましょう。managed-schema.xmlで次のようなdynamicFieldを設定したとします。
<dynamicField name="*_s" type="string" indexed="true" stored="true" />
<dynamicField name="*_sm" type="string" indexed="true" stored="true" multiValued="true"/>
dynamicFieldのフィールド名(nameで指定)は、必ず上記のように アスタリスク(*)
を1つ含むように設定します(フィールド名はアスタリスクで始まるかまたは終わるように指定)。そして、検索時やインデクシング時にフィールド名を次のように指定したとします。
(検索時にqパラメーターにクエリ式を指定)
q=domain_s:kandasearch.com
するとApache Solrでは、 domain_s
というフィールド指定がなくても、dynamicFieldの最初の設定 name="*_s"
がパターンマッチにより合致するので、indexed="true" で stored="true" のstring型と解釈されます。
同様に、次のような検索を行えば、tags_sm は複数の値を持つstring型である、と解釈してくれるようになります。
(検索時にqパラメーターにクエリ式を指定)
q=tags_sm:カラフル OR tags_sm:カッコイイ