我正在使用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版本。
答案 0 :(得分:7)
如果您不需要范围查询,请使用“整数”作为Sorts work correctly on both
像sint,sdouble这样的可排序字段类型有点用词不当。他们 在上述意义上的排序不需要,但是 在进行RangeQuery查询时需要。事实上,Sortables是指 使数字按字典顺序排序的概念 字符串。也就是说,如果没有这样做,数字1..10排序 按字典顺序排列为1,10,2,3 ......使用sint,但是补救措施 这个。但是,如果您不需要仅执行RangeQuery查询 需要对字段进行排序,然后只需使用int或double或者 等同的适当班级。你将节省自己的时间和记忆。
答案 1 :(得分:1)
在Solr 5中不推荐使用Sortable字段类型,不应使用它。您可以使用solr int或tint字段类型