Apache Solr の schema と fl パラメータについて

2021年11月28日 engineering

こんにちは、 @kz_morita です。

今回は、Apache Solr を使った際に、stored = false で index したフィールドを確認する件で調査をしたのでまとめます。

前提となる schema

前提として、以下のような schema.xml とします。

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="solr-sample" version="1.0">
  <fields>
    <field name="field-1" type="string" indexed="true" stored="true" docValues="false" />
    <field name="field-2" type="string" indexed="false" stored="true" docValues="false" />
    <field name="field-3" type="string" indexed="false" stored="false" docValues="true" />
    <field name="field-4" type="string" indexed="false" stored="false" docValues="true" useDocValuesAsStored="true" />
    <field name="field-5" type="string" indexed="false" stored="false" docValues="true" useDocValuesAsStored="false" />
  </fields>
  ...
  ..
</schema>

上記では、field-1 ~ field-5 までフィールドを指定しています。

プロパティについて

ここでは、以下のプロパティに着目します。

  • indexed
  • stored
  • docValues
  • useDocValuesAsStored

公式のドキュメント を参考にするとそれぞれ以下のような意味になります。

プロパティ 説明 Default
indexed true であれば、このフィールドの値をクエリで検索できます。 ture or false true
stored true であれば、このフィールドの値をクエリで取得できます。 ture or false true
docValues true であれば、このフィールドの値は列指向の構造体で配置されます。 ture or false false
useDocValuesAsStored docValues が true で、このプロパティも true であれば、fl パラメータのワイルドカード検索時も stored=true と同じようにデータが取得できます ture or false true

今回問題になったのが、field-5 のケースです。

<field name="field-5" type="string" indexed="false" stored="false" docValues="true" useDocValuesAsStored="false" />

stored="false" で、useDocValuesAsStored="false" なので、通常通り検索しても、field-5 は、検索結果のデータには含まれません。

field=1, field-2 は、stured=true なので、検索結果に含まれます。field-3, field-4 は、stored="false" ですが、docValues="true" かつ、useDocValuesAsStored="true" (デフォルト値) なので、検索結果に含まれます。

検索結果に含まれない field-5 ですが、このデータを確認するためには、fl パラメータを指定して検索する必要があります。

fl パラメータ

fl パラメータ (Field List Parameter) を使用して検索をすると、指定されたパラメータに検索結果を制限することが出来ます。

field-5 の値は、fl パラメータが未指定やワイルドカードを使用すると表示することが出来ませんが、 フィールド名を完全一致で指定 (今回の例で言えば、fl=field-5) すると、field-5 の実際の値を確認することが出来ます。

まとめ

今回は、Apache Solr の schema の プロパティと fl パラメータについてまとめました。

まだまだ、Solr は触り始めたばかりなので引き続き、調べたり使っていく中での疑問点はまとめていきたいと思います。

この記事をシェア