1. ホーム
  2. solr

Solrインデックスとストアドの比較

2023-08-05 16:20:13

質問

Solrフィールドのインデックスとストアドアティテュートの動作がどうなっているのか、少し混乱しています。

例えば、Schema.xmlに次のようなものがあるとします。

<field name="test1" type="text" indexed="false"
        stored="false" required="false" />

フィールド test1 フィールドを含むドキュメントを作成し、そのフィールドに値を設定し、そのドキュメントをSolrにコミットしても、Solrドキュメントに保存されないのでしょうか?私は stored=false 属性があるので、フィールドの値はSolrで失われ、永続化されないということでしょうか?

どのように解決するのですか?

その通りです。通常、フィールドをインデックス化または保存のいずれか、あるいは両方にすることを希望します。両方をfalseに設定すると、そのフィールドはSolrドキュメントで利用できなくなります(検索または表示のどちらかで)。両方をfalseに設定したい特別な場合については、Alexandreの回答を参照してください。

記載されているように ここで : indexed=true は、フィールドを検索可能にします(ソートやファセットも可能)。例えば、もしあなたが test1 というフィールドがある場合 indexed=true のように、検索することができます。 q=test1:foo というように検索できます。 foo は検索する値です。もし indexed=false というフィールドに対して test1 を持つドキュメントがあったとしても、そのクエリは何も結果を返しません。 test1 の値が foo .

stored=true は、検索時にそのフィールドを取得できることを意味します。クエリの中で明示的にフィールドの値を取得したい場合には fl のようなパラメータをクエリで指定します。 fl=test1 (デフォルトは fl=* で、保存されているすべてのフィールドを取得することを意味します)。もし stored=true の場合 test1 の場合、その値が返される。それ以外の場合は返されません。