2013-09-01 10 views
5

Fino a Lucene versione 3.9, potremmo specificare di indicizzare o non indicizzare un campo usando FIELD.INDEX.NO o FIELD.INDEX.ANALYZED ecc. Ma in lucene 4.0 non c'è costruttore disponibile, in cui possiamo definire questo. Come controlliamo l'indicizzazione in questa versione?Come controllare l'indicizzazione di un campo in lucene 4.0

Voglio dire se voglio un campo "nome" da memorizzare nell'indice ma non voglio indicizzarlo, quindi come posso farlo in lucene 4.0?

risposta

13

I costruttori che accettano gli argomenti Field.Index sono disponibili, ma sono deprecati in 4.0 e non devono essere utilizzati. Invece, dovresti cercare sottoclassi di Field per controllare come viene indicizzato un campo.

  • StringField è il campo indicizzato standard non analizzato. Il campo è indicizzato è un singolo token. Sono cose appropriate come gli identificatori, per i quali hai solo bisogno di cercare corrispondenze esatte.

  • TextField è il campo standard analizzato (e, ovviamente, indicizzato) per il contenuto testuale. È una scelta appropriata per la ricerca full-text.

  • StoredField è un campo memorizzato che non è indicizzato affatto (e quindi non è ricercabile).

Tranne StoredField, ciascuno di questi può essere passato un valore Field.Store come argomento del costruttore, simile a Lucene 3.6.

Per ulteriori informazioni su questo cambiamento, dare un'occhiata al Lucene Migration Guide, in particolare le sezioni intitolate: "IndexableFieldType separato dalle istanze di campo"

+0

Grazie per la risposta. È stato utile Un'altra cosa che possiamo fare è creare un nuovo FieldType e impostare i nostri requisiti utilizzando i metodi disponibili, setIndexed(), setStored(), ecc. E quindi possiamo passare questo oggetto fieldtype al costruttore di campi. –