luceneEliminazione di documenti mediante una query a più termini


introduzione

Cancellare documenti da un indice di Lucene è facile quando hai un campo chiave primaria nel tuo documento (come nei tradizionali database SQL).

Tuttavia, a volte l'eliminazione di un numero di documenti basato su più campi nel documento è ciò di cui hai bisogno. L'API Lucene consente di ottenere ciò specificando una query da utilizzare per l'eliminazione.

Per fare ciò, selezionare l'analizzatore giusto, costruire la query, passare la query a indexWriter per eliminare i documenti.

Sintassi

  1. indexWriter.deleteDocuments (multiTermQuery);
  2. Query multiTermQuery = new QueryParser ("", analyzer) .parse ("field_name1:" campo valore 1 "AND campo_name2:" campo valore 2 "");
  3. BooleanQuery multiTermQuery = new BooleanQuery (); multiTermQuery.add (nuovo TermQuery (nuovo Term ("field_name1", "valore campo 1")), BooleanClause.Occur.MUST); multiTermQuery.add (nuovo TermQuery (new Term ("field_name2", "field value 2")), BooleanClause.Occur.MUST);

Osservazioni

Avvertenze con la scelta dell'analizzatore

Non è immediatamente ovvio, ma l'analizzatore che stai utilizzando fa un'enorme differenza nel modo in cui viene eseguita la tua query. Questo perché StandardAnalyzer filtra le parole inglesi comuni come "the" e "a". Potresti voler scegliere un altro analizzatore (come KeywordAnalyzer) in modo che corrisponda esattamente. Questo ovviamente dipende dall'applicazione di Lucene, ovviamente.

Eliminazione di documenti mediante una query a più termini Esempi correlati