daily pastebin goal
56%
SHARE
TWEET

Whoosh range search results

a guest Apr 16th, 2012 11 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env python2
  2.  
  3. import os
  4. from pprint import pprint
  5.  
  6. from whoosh import versionstring
  7. from whoosh.fields import Schema, NUMERIC, TEXT, ID
  8. import whoosh.index as index
  9. from whoosh.qparser import QueryParser, plugins
  10.  
  11. print "Whoosh Version:", versionstring()
  12.  
  13. values = [{'num1':u'1', 'num2':1, 'num3':u'1'},
  14.           {'num1':u'10', 'num2':10, 'num3':u'10'},
  15.           {'num1':u'100', 'num2':100, 'num3':u'100'},
  16.           {'num1':u'1000', 'num2':1000, 'num3':u'1000'},
  17.           {'num1':u'2', 'num2':2, 'num3':u'2'},
  18.           {'num1':u'20', 'num2':20, 'num3':u'20'},
  19.           {'num1':u'200', 'num2':200, 'num3':u'200'},
  20.           {'num1':u'2000', 'num2':2000, 'num3':u'2000'},
  21.           {'num1':u'9', 'num2':9, 'num3':u'9'},
  22.           {'num1':u'90', 'num2':90, 'num3':u'90'},
  23.           {'num1':u'900', 'num2':900, 'num3':u'900'},
  24.           {'num1':u'9000', 'num2':9000, 'num3':u'9000'},
  25.           {'num1':u'1', 'num2':u'1', 'num3':u'1'},
  26.           {'num1':u'10', 'num2':u'10', 'num3':u'10'},
  27.           {'num1':u'2', 'num2':u'2', 'num3':u'2'},
  28.           {'num1':u'20', 'num2':u'20', 'num3':u'20'},
  29.           {'num1':u'5', 'num2':u'5', 'num3':u'5'},
  30.           {'num1':u'55', 'num2':u'55', 'num3':u'55'},
  31.           {'num1':u'555', 'num2':u'555', 'num3':u'555'},
  32.           {'num1':u'5555', 'num2':u'5555', 'num3':u'5555'}, ]
  33.  
  34. searchstring = [u'num1:>55', u'num2:>55', u'num3:>55']
  35.  
  36. schema = Schema(num1=ID(stored=True),
  37.                 num2=NUMERIC(stored=True, signed=False),
  38.                 num3=TEXT(stored=True))
  39.  
  40. if not os.path.exists("testindexdir"):
  41.     os.mkdir("testindexdir")
  42.  
  43. ix = index.create_in("testindexdir", schema, indexname='test1')
  44.  
  45. writer = ix.writer()
  46.  
  47. for element in values:
  48.     writer.add_document(**element)
  49.  
  50. writer.commit()
  51.  
  52. for ss  in searchstring:
  53.     with ix.searcher() as s:
  54.         qp = QueryParser("content", ix.schema,
  55.                          [plugins.FieldsPlugin(),
  56.                           plugins.RangePlugin(),
  57.                           plugins.GtLtPlugin()
  58.                          ])
  59.         q = qp.parse(ss)
  60.         pprint(q)
  61.         results = s.search(q, limit=None)
  62.         pprint([i.fields() for i in results])
  63.  
  64. #Output:
  65. """
  66. Whoosh Version: 2.3.2
  67. TermRange(u'num1', u'55', None, True, False, boost=1.0, constantscore=True)
  68. [{'num1': u'9', 'num2': 9, 'num3': u'9'},
  69. {'num1': u'90', 'num2': 90, 'num3': u'90'},
  70. {'num1': u'900', 'num2': 900, 'num3': u'900'},
  71. {'num1': u'9000', 'num2': 9000, 'num3': u'9000'},
  72. {'num1': u'555', 'num2': u'555', 'num3': u'555'},
  73. {'num1': u'5555', 'num2': u'5555', 'num3': u'5555'}]
  74. NumericRange(u'num2', 55, None, True, False, boost=1.0, constantscore=True)
  75. [{'num1': u'1', 'num2': 1, 'num3': u'1'},
  76. {'num1': u'10', 'num2': 10, 'num3': u'10'},
  77. {'num1': u'100', 'num2': 100, 'num3': u'100'},
  78. {'num1': u'1000', 'num2': 1000, 'num3': u'1000'},
  79. {'num1': u'2', 'num2': 2, 'num3': u'2'},
  80. {'num1': u'20', 'num2': 20, 'num3': u'20'},
  81. {'num1': u'200', 'num2': 200, 'num3': u'200'},
  82. {'num1': u'2000', 'num2': 2000, 'num3': u'2000'},
  83. {'num1': u'9', 'num2': 9, 'num3': u'9'},
  84. {'num1': u'90', 'num2': 90, 'num3': u'90'},
  85. {'num1': u'900', 'num2': 900, 'num3': u'900'},
  86. {'num1': u'9000', 'num2': 9000, 'num3': u'9000'},
  87. {'num1': u'1', 'num2': u'1', 'num3': u'1'},
  88. {'num1': u'10', 'num2': u'10', 'num3': u'10'},
  89. {'num1': u'2', 'num2': u'2', 'num3': u'2'},
  90. {'num1': u'20', 'num2': u'20', 'num3': u'20'},
  91. {'num1': u'5', 'num2': u'5', 'num3': u'5'},
  92. {'num1': u'55', 'num2': u'55', 'num3': u'55'},
  93. {'num1': u'555', 'num2': u'555', 'num3': u'555'},
  94. {'num1': u'5555', 'num2': u'5555', 'num3': u'5555'}]
  95. TermRange(u'num3', u'55', None, True, False, boost=1.0, constantscore=True)
  96. [{'num1': u'90', 'num2': 90, 'num3': u'90'},
  97. {'num1': u'900', 'num2': 900, 'num3': u'900'},
  98. {'num1': u'9000', 'num2': 9000, 'num3': u'9000'},
  99. {'num1': u'555', 'num2': u'555', 'num3': u'555'},
  100. {'num1': u'5555', 'num2': u'5555', 'num3': u'5555'}]
  101. """
RAW Paste Data
Top