2016-05-29 5 views
2

(Derzeit mit Lucene 4.6).Lucene - String-Feld, das nicht indiziert werden muss

Ich frage mich nur, warum es irgendwie unerwünscht scheint, Textinformationen in einer org.apache.lucene.document.Document zu speichern, die nicht indiziert ist. TextField wird indexiert und in Token umgewandelt. StringField ist indiziert, aber nicht in Token.

Aber vorausgesetzt, Sie brauchen nur eine String, die die anderen Informationen in Ihrem org.apache.lucene.document.Document s begleitet, aber selbst nie Gegenstand einer Abfrage sein wird?

Es ist nur, dass (in 4.6) org.apache.lucene.document.Field.Index hat ein "NEIN", was bedeutet "indizieren Sie nicht den Feldwert.", Aber das ist derzeit "Veraltet".

Warum? Gibt es eine bessere Möglichkeit, "inerte" String Informationen zu haben, die Ihre indexierten (und möglicherweise in Token gesetzten) signifikanteren Felder begleiten?

Antwort

1

können Sie die folgenden constructor für Ihr Feld verwenden

Field(java.lang.String, java.lang.String, org.apache.lucene.document.FieldType) 

Fieldtype property

public void setIndexed(boolean value) 

hat, oder Sie können Ihnen benutzerdefiniertes Feld erstellen, in dem Sie Standardkonstruktors mit Notwendigkeit zu dem Feldtyp außer Kraft setzen :

public final class StringNoIndexedField extends Field { 
    public static final FieldType TYPE_NOT_INDEXED = new FieldType(); 
    static { 
     TYPE_NOT_INDEXED.setIndexed(false); 
     TYPE_NOT_INDEXED.setStored(true); 
     TYPE_NOT_INDEXED.setTokenized(false); 
     TYPE_NOT_INDEXED.freeze(); 
    } 

    public StringNoIndexedField(String name, String value) { 
    super(name, value, TYPE_NOT_INDEXED); 
    } 
} 
+1

Danke ... Ich bin ein wenig verwirrt über dieses Byte arr ay in deiner ersten Lösung ... (woher kommt es und was macht es?); auch (wenn ich nicht sehr langsam bin, wofür ich mich entschuldige), sollte der Name des Konstruktors in Ihrer zweiten Lösung nicht "StringNoIndexedField", sondern "StringField" sein ... vielleicht möchten Sie das ändern, wenn das der Fall ist ??? –

+0

Danke für Kommentare, Sie haben Recht. Ich habe dieses Problem behoben. –

Verwandte Themen