用于排序整数值的正确Solr fieldType是什么?

时间:2012-11-14 02:49:59

标签: sorting solr lucene

我正在使用Solr 3.6.1。用于包含整数值的Solr排序字段的正确字段类型是什么?我只需要将此字段用于排序,并且永远不会对其进行范围查询。我应该使用integer还是sint

我在schema.xml中看到sint类型声明为:

 <!-- 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"/>

integer说明如下:

 <!-- 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"/>

我问这个的主要原因是因为我在sint字段上做的每个Solr排序(我有很多声明为动态字段)填充(不可配置的)lucene fieldCache。我在fieldCache下的stats页面(http:// HOST:PORT / solr / CORE / admin / stats.jsp)上看到sint排序存储为

org.apache.lucene.search.FieldCache$StringIndex

integer种类存储为

org.apache.lucene.search.FieldCache.DEFAULT_INT_PARSER

我相信消耗更少的空间?


更新:Solr 3.6.1 schema.xml将int声明为TrieIntField,即

<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>

上面的一个来自较旧的solr版本。

2 个答案:

答案 0 :(得分:7)

如果您不需要范围查询,请使用“整数”作为Sorts work correctly on both

Documentation: -

  

像sint,sdouble这样的可排序字段类型有点用词不当。他们   在上述意义上的排序不需要,但是   在进行RangeQuery查询时需要。事实上,Sortables是指   使数字按字典顺序排序的概念   字符串。也就是说,如果没有这样做,数字1..10排序   按字典顺序排列为1,10,2,3 ......使用sint,但是补救措施   这个。但是,如果您不需要仅执行RangeQuery查询   需要对字段进行排序,然后只需使用int或double或者   等同的适当班级。你将节省自己的时间和记忆。

答案 1 :(得分:1)

在Solr 5中不推荐使用Sortable字段类型,不应使用它。您可以使用solr int或tint字段类型