code_junkie

Using Lucene to count results in categories

Nov 11th, 2011
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. public BitSet[] getBitSets(IndexSearcher indexSearcher,
  2. Category[] categories) {
  3. BitSet[] bitSets = new BitSet[categories.length];
  4. for(int i=0; i<categories.length; i++)
  5. {
  6. Query query = categories[i].getQuery();
  7. final BitSet bitset = new BitSet()
  8. indexSearcher.search(query, new HitCollector() {
  9. public void collect(int doc, float score) {
  10. bitSet.set(doc);
  11. }
  12. });
  13. bitSets[i] = bitSet;
  14. }
  15. return bitSets;
  16. }
  17.  
  18. public int[] getCategroryCount(IndexSearcher indexSearcher,
  19. Query query,
  20. final BitSet[] bitSets) {
  21. final int[] count = new int[bitSets.length];
  22. indexSearcher.search(query, new HitCollector() {
  23. public void collect(int doc, float score) {
  24. for(int i=0; i<bitSets.length; i++) {
  25. if(bitSets[i].get(doc)) count[i]++;
  26. }
  27. }
  28. });
  29. return count;
  30. }
  31.  
  32. int numDocs = 0;
  33. td.seek(terms);
  34. while (td.next()) {
  35. numDocs++;
  36. }
  37.  
  38. int numDocs = terms.docFreq()
  39.  
  40. public static void countDocumentsInCategories(IndexReader reader) throws IOException {
  41. TermEnum terms = null;
  42. TermDocs td = null;
  43.  
  44.  
  45. try {
  46. terms = reader.terms(new Term("Category", ""));
  47. td = reader.termDocs();
  48. do {
  49. Term currentTerm = terms.term();
  50.  
  51. if (!currentTerm.field().equals("Category")) {
  52. break;
  53. }
  54.  
  55. int numDocs = 0;
  56. td.seek(terms);
  57. while (td.next()) {
  58. numDocs++;
  59. }
  60.  
  61. System.out.println(currentTerm.field() + " : " + currentTerm.text() + " --> " + numDocs);
  62. } while (terms.next());
  63. } finally {
  64. if (td != null) td.close();
  65. if (terms != null) terms.close();
  66. }
  67. }
  68.  
  69. public static void main(String[] args) throws Exception {
  70. RAMDirectory store = new RAMDirectory();
  71.  
  72. IndexWriter w = new IndexWriter(store, new StandardAnalyzer());
  73. addDocument(w, 1, "Apple", "fruit", "computer");
  74. addDocument(w, 2, "Orange", "fruit", "colour");
  75. addDocument(w, 3, "Dell", "computer");
  76. addDocument(w, 4, "Cumquat", "fruit");
  77. w.close();
  78.  
  79. IndexReader r = IndexReader.open(store);
  80. countDocumentsInCategories(r);
  81. r.close();
  82. }
  83.  
  84. private static void addDocument(IndexWriter w, int id, String name, String... categories) throws IOException {
  85. Document d = new Document();
  86. d.add(new Field("ID", String.valueOf(id), Field.Store.YES, Field.Index.UN_TOKENIZED));
  87. d.add(new Field("Name", name, Field.Store.NO, Field.Index.UN_TOKENIZED));
  88.  
  89. for (String category : categories) {
  90. d.add(new Field("Category", category, Field.Store.NO, Field.Index.UN_TOKENIZED));
  91. }
  92.  
  93. w.addDocument(d);
  94. }
Add Comment
Please, Sign In to add comment