読者です 読者をやめる 読者になる 読者になる

すべてのfieldを対象とした検索

Lucene Solr

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"とすることでディスク容量が節約できます。