2012-03-12 8 views
14

Indeksowanie wartość logiczną (true/false) w Lucene (nie trzeba przechowywać) Chcę uzyskać więcej miejsca na dysku i wykorzystanie wyższa wydajność wyszukiwaniaJaki jest najlepszy wybór do indeksowania wartości logicznej w lucene?

doc.add(new Field("boolean","true",Field.Store.NO,Field.Index.NOT_ANALYZED_NO_NORMS)); 
//or 
doc.add(new Field("boolean","1",Field.Store.NO,Field.Index.NOT_ANALYZED_NO_NORMS)); 
//or 
doc.add(new NumericField("boolean",Integer.MAX_VALUE,Field.Store.NO,true).setIntValue(1)); 

Który mam wybrać? Lub w jakikolwiek inny lepszy sposób?

thanks a lot

Odpowiedz

10

Ciekawym pytanie!

  • Nie sądzę, że trzecia opcja (NumericField) jest dobrym wyborem dla pola boolowskiego. Nie mogę o tym myśleć.
  • Lucene indeks wyszukiwania (pozostawiając na bok przechowywanych danych, które nie są w każdym razie korzystających) jest przechowywana jako odwróconego indeksu
  • wychodzenia z pierwszą i drugą opcje (teoretycznie) identycznego

If Miałem do czynienia z tym, myślę, że wybrałbym opcję pierwszą ("prawdziwe" i "fałszywe"), jeśli ma to wpływ na ostateczną decyzję.

Twój wybór NOT_ANALYZED_NO_NORMS wygląda dobrze, tak myślę.

+0

cześć, @ adrian-conlon, możesz pomóc w tym? bardzo dziękuję http://stackoverflow.com/questions/10464377/using-booleanquery-or-write-more-indexes – Koerr

2

Lucene przeskakuje przez skomplikowany zestaw obręczy, aby umożliwić odszukanie NumericField przez NumericRangeQuery, więc zdecydowanie unikaj tego we wszystkich przypadkach, w których twoje wartości nie reprezentują ilości. Na przykład, nawet jeśli indeksujesz liczbę całkowitą, ale tylko jako unikalny identyfikator, nadal będziesz chciał użyć zwykłego pola String. Użycie "true"/"false" jest najbardziej naturalnym sposobem indeksowania wartości logicznej, podczas gdy użycie "1"/"0" daje tylko niewielką przewagę, unikając możliwości niedopasowania i literówki. Powiedziałbym, że ta przewaga nie jest wiele warta i idę na true/false.

+0

Oprócz NumericRangeQuery, należy pamiętać o kolejnej korzyści z NumericField: NumericField jest idealny do sortowania, ponieważ budowanie bufora pola jest znacznie szybciej niż z numerami tekstowymi. Źródło: http://lucene.apache.org/core/2_9_4/api/core/org/apache/lucene/search/NumericRangeQuery.html –

4

Użyj Solr (smak lucenu) - indeksuje on wszystkie podstawowe typy java.

Użyłem go i to kołysze.

Powiązane problemy