4

約100000アイテムのSolrインデックスがあります。インデックスの1つのフィールドは、0からINT_MAXの範囲の整数です(実際には、インデックスの最大値は157です)。このフィールドで範囲クエリを実行しようとすると、非常に奇妙な結果が得られます。

範囲クエリ:

  • nb_validations:[10 TO*]=>は40499アイテムを返します
  • nb_validations:[9 TO *] => 6つのアイテムを返します(少なくとも40499 ?? !!
  • nb_validations:[8 TO *]=>13個のアイテムを返します

完全一致クエリ:

  • nb_validations:10=>2005アイテムを返します
  • nb_validations:9=>6つのアイテムを返します

ログにエラーはなく、Solr構成は問題ないようです。フィールドはintとして宣言され、インデックスが付けられて格納されます。

それのどこが悪いんだい ?インデックスが破損する可能性はありますか?

ありがとう。

4

2 に答える 2

4

を使用sintして値を格納し、フィールドを範囲クエリに使用する必要があります。

<field name="age" type="sint" indexed="true" stored="true"/>

フィールドタイプが整数の場合でも、Solrはおそらくそれを文字列として扱います。

<field name="age" type="integer" indexed="true" stored="true"/>

ドキュメント:-

「整数」値を単純な文字列としてエンコードする従来の数値フィールドタイプ。このクラスは、文字列としてインデックス付けされた数値を含む既存のインデックスを持つユーザー以外は使用しないでください。新しいスキーマはTrieIntFieldを使用する必要があります。

フィールド値は数値で並べ替えられますが、範囲クエリ(および数値範囲に依存するその他の機能)は期待どおりに機能しません。値は数値順ではなく、Unicode文字列順で評価されます。

于 2012-11-05T13:10:11.467 に答える
0

「int」型を使用すると、範囲クエリが正常に機能します。

<field name="my_name" type="int" indexed="true" stored="false"/>

<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
于 2015-10-12T11:02:17.813 に答える