すべてのfieldを対象とした検索
schemaでfieldを複数定義した場合、すべてのフィールドをまとめて検索したいということがあると思います。フィールドの数が少なく単純なクエリであれば、
field1:キーワード OR field2:キーワード ...
でもよいと思いますが、フィールドが多いと面倒です。ML等で調べてましたが、いちばんきれいな方法はすべてのフィールドのデータを持つフィールドを用意してそのフィールドを検索するということのようです。
Nabble - Lucene - Java Users - How to search over all fields in a clean way?
今度は、schema.xmlの記述がめんどうですが、dynamicFieldとcopyFiledを利用するとすっきり記述できそうです。
... <types> ... <fieldType name="text_cjk" class="solr.TextField"> <analyzer> <tokenizer class="solr.CJKTokenizerFactory"/> </analyzer> </fieldType> </types> <fields> ... <!-- すべてのフィールドを保持するフィールド --> <field name="all" type="text_cjk" indexed="true" stored="false" required="false" multiValued="true"/> <!-- 名前が"_text"で終わる場合にはフィールドを自動生成--> <dynamicField name="*_text" type="text_cjk" indexed="true" stored="true"/> <!-- dynamicFieldの内容をallフィールドにコピーする--> <copyField source="*_text" dest="all"/> </fields> ...
この様な記述でもOKでした。allフィールドはstored="false"とすることでディスク容量が節約できます。