6

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

我看到在 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 下的统计页面 (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声明为TrieIntFieldie as

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

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

4

2 回答 2

8

如果您不需要范围查询,请使用“整数”,因为 排序在两者上都能正常工作

文档:-

sint、sdouble 等可排序的字段类型有点用词不当。上述意义上的排序不需要它们,但在进行 RangeQuery 查询时需要它们。事实上,Sortables 指的是使数字按字典顺序正确排序为字符串的概念。也就是说,如果不这样做,数字 1..10 按字典顺序排序为 1,10, 2, 3... 使用 sint,但是可以解决此问题。但是,如果您不需要执行 RangeQuery 查询而只需要对字段进行排序,则只需使用 int 或 double 或等效的适当类。您将节省自己的时间和记忆。

于 2012-11-14T03:52:55.650 回答
1

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

于 2015-11-03T15:23:44.317 回答