2012-11-14 6 views
6

Ich benutze Solr 3.6.1. Was ist der richtige Feldtyp für ein Solr-Sortierfeld, das ganzzahlige Werte enthält? Ich brauche dieses Feld nur zum Sortieren und mache keine Bereichsabfragen darauf. Sollte ich integer oder sint verwenden?Wie lautet der korrekte Solr-Feldtyp für die Sortierung ganzzahliger Werte?

Ich sehe, dass in schema.xml gibt sint Typ deklariert ist als:

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

während integer sagt der folgende:

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

Der Hauptgrund ich dies zu fragen, weil jeder Solr Sortiere ich auf ein sint Feld (ich habe viele von ihnen als dynamische Felder deklariert) bevölkert den (nicht konfigurierbaren) Lucene FieldCache. Ich sehe auf der Statistikseite (http: // host: port/Solr/CORE/admin/stats.jsp) unter fieldCache dass sint Sorten wie

org.apache.lucene.search.FieldCache$StringIndex

gespeichert sind, während integer Sorten wie

gespeichert sind,

org.apache.lucene.search.FieldCache.DEFAULT_INT_PARSER

was ich glaube, verbraucht weniger Platz?


UPDATE: Solr 3.6.1 schema.xml hat int als TrieIntField erklärt das heißt als

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

Die oben von einer älteren Version solr war.

+3

Sie sollten immer TrieIntField anstelle von IntField und SortableIntField verwenden: Diese Klasse hat eine ** viel ** mehr Speicher-effiziente FieldCache Impl – jpountz

Antwort

7

Wenn Sie Bereichsabfragen nicht, "integer" als Sorts work correctly on both

Documentation verwenden: -

Sortable Fieldtypes wie sint, sind sdouble ein wenig irreführend. Sie werden nicht für das Sortieren in dem oben beschriebenen Sinne benötigt, aber werden benötigt, wenn RangeQuery-Abfragen ausgeführt werden. Sortiere beziehen sich in der Tat auf die Idee, die Zahl richtig lexikografisch als Strings zu machen. Das heißt, wenn dies nicht getan wird, die Zahlen 1.10 sort lexikografisch wie 1,10, 2, 3 ... Mit einem Sint, jedoch Abhilfemaßnahmen dies. Wenn Sie jedoch keine RangeQuery-Abfragen durchführen müssen und nur nach dem Feld sortieren müssen, verwenden Sie einfach eine int oder double oder die entsprechende entsprechende Klasse . Sie sparen sich Zeit und Gedächtnis.

1

Die sortierbaren Feldtypen werden in Solr 5 veraltet und sollten nicht verwendet werden. Sie können die Solr Int oder Tint Feldtypen verwenden

Verwandte Themen