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

数値での範囲検索

integerやfloatなどの数値のフィールドで範囲検索([1 TO 100]みたいなの)を行うためには、schema.xmlにてそのフィールドのfieldType を"sint"や"sfloat"にしておく必要があります。

    <!-- numeric field types that store and index the text
         value verbatim (and hence don't support range queries, since the
         lexicographic ordering isn't equal to the numeric ordering) -->
    <fieldType name="integer" class="solr.IntField" omitNorms="true"/>
    <fieldType name="long" class="solr.LongField" omitNorms="true"/>
    <fieldType name="float" class="solr.FloatField" omitNorms="true"/>
    <fieldType name="double" class="solr.DoubleField" omitNorms="true"/>

    <!-- Numeric field types that manipulate the value into
         a string value that isn't human-readable in its internal form,
         but with a lexicographic ordering the same as the numeric ordering,
         so that range queries work correctly. -->
    <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>

というサンプルのschema.xmlのコメントにあるとおり、単純にintやfloatを指定すると、アルファベット順にソートして範囲検索が行われるために、桁数や小数が考慮されず意図しない結果になります。