class FieldRegistry(object): def __init__(self, drilldownFields=None): self._fieldDefinitions = { IDFIELD: _FieldDefinition.define(type=StringField.TYPE_STORED, name=IDFIELD), } self._drilldownFieldNames = set() self._hierarchicalDrilldownFieldNames = set() self.facetsConfig = FacetsConfig() for field in (drilldownFields or []): self.registerDrilldownField(field.name, hierarchical=field.hierarchical, multiValued=field.multiValued) def createField(self, fieldname, value, mayReUse=False): return self._getFieldDefinition(fieldname).createField(value, mayReUse=mayReUse) def createIdField(self, value): return self.createField(IDFIELD, value) def register(self, fieldname, fieldType): self._fieldDefinitions[fieldname] = _FieldDefinition.define(type=fieldType, name=fieldname) def phraseQueryPossible(self, fieldname): return self._getFieldDefinition(fieldname).phraseQueryPossible def isUntokenized(self, fieldname): return self._getFieldDefinition(fieldname).isUntokenized def registerDrilldownField(self, fieldname, hierarchical=False, multiValued=True): self._drilldownFieldNames.add(fieldname) if hierarchical: self._hierarchicalDrilldownFieldNames.add(fieldname) self.facetsConfig.setMultiValued(fieldname, multiValued) self.facetsConfig.setHierarchical(fieldname, hierarchical) def isDrilldownField(self, fieldname): return fieldname in self._drilldownFieldNames def isHierarchicalDrilldown(self, fieldname): return fieldname in self._hierarchicalDrilldownFieldNames def makeDrilldownTerm(self, fieldname, path): indexFieldName = self.facetsConfig.getDimConfig(fieldname).indexFieldName; return DrillDownQuery.term(indexFieldName, fieldname, path) def _getFieldDefinition(self, fieldname): fieldDefinition = self._fieldDefinitions.get(fieldname) if fieldDefinition is not None: return fieldDefinition fieldDefinitionCreator = TEXTFIELD if fieldname.startswith(SORTED_PREFIX) or fieldname.startswith(UNTOKENIZED_PREFIX): fieldDefinitionCreator = STRINGFIELD if fieldname.startswith(KEY_PREFIX) or fieldname.startswith(NUMERIC_PREFIX): fieldDefinitionCreator = NUMERICFIELD fieldDefinition = fieldDefinitionCreator(name=fieldname) self._fieldDefinitions[fieldname] = fieldDefinition return fieldDefinition
def __init__(self, drilldownFields=None): self._fieldDefinitions = { IDFIELD: _FieldDefinition.define(type=StringField.TYPE_STORED, name=IDFIELD), } self._drilldownFieldNames = set() self._hierarchicalDrilldownFieldNames = set() self.facetsConfig = FacetsConfig() for field in (drilldownFields or []): self.registerDrilldownField(field.name, hierarchical=field.hierarchical, multiValued=field.multiValued)
def __init__(self, directory): self.directory = directory # create Directories for the search index and for the taxonomy index # in RAM or on Disc #indexDir = RAMDirectory() #taxoDir = RAMDirectory() self.indexDir = FSDirectory.open(Paths.get(os.path.join(self.directory, INDEX_DIR))) self.taxoDir = FSDirectory.open(Paths.get(os.path.join(self.directory, TAXONOMY_DIR))) # FacetConfig self.facets_config = FacetsConfig() self.facets_config.setHierarchical("Categories", True) self.facets_config.setMultiValued("Categories", True)
def testMergeTwoArray(self): f = FacetSuperCollector(None, FacetsConfig(), CachedOrdinalsReader(DocValuesOrdinalsReader())) f.mergePool([0, 1, 2, 3, 4]) f.mergePool([0, 0, 1, 1, 1]) self.assertEquals([0, 1, 3, 4, 5], f.getFirstArray())
def testEmpty(self): f = FacetSuperCollector(None, FacetsConfig(), CachedOrdinalsReader(DocValuesOrdinalsReader())) self.assertEquals(None, f.getFirstArray())
class FacetExample(object): def __init__(self, directory): self.directory = directory # create Directories for the search index and for the taxonomy index # in RAM or on Disc #indexDir = RAMDirectory() #taxoDir = RAMDirectory() self.indexDir = FSDirectory.open(Paths.get(os.path.join(self.directory, INDEX_DIR))) self.taxoDir = FSDirectory.open(Paths.get(os.path.join(self.directory, TAXONOMY_DIR))) # FacetConfig self.facets_config = FacetsConfig() self.facets_config.setHierarchical("Categories", True) self.facets_config.setMultiValued("Categories", True) def createIndex(self): # index the sample documents SimpleIndexer.index(self.indexDir, self.taxoDir, self.facets_config) def runSimple(self): # open readers taxo = DirectoryTaxonomyReader(self.taxoDir) indexReader = DirectoryReader.open(self.indexDir) for term in searchValues: print "\nsearch by term '%s' ..." % term facetRes = SimpleSearcher.searchWithTerm(term, indexReader, taxo, self.facets_config) print "\nsearch all documents ..." facetRes = SimpleSearcher.searchWithFacets(indexReader, taxo, self.facets_config) # close readers taxo.close() indexReader.close() # return result return facetRes def runDrillDown(self): # open readers taxo = DirectoryTaxonomyReader(self.taxoDir) indexReader = DirectoryReader.open(self.indexDir) for drilldown in drilldownCategories: print "search with drilldown: %s" % '/'.join(drilldown) facetRes = SimpleSearcher.searchWithDrillDown(drilldown, indexReader, taxo, self.facets_config) # close readers taxo.close() indexReader.close() # return result return facetRes def main(cls, argv): baseDir = os.path.dirname(os.path.abspath(argv[0])) if len(argv) > 1: index = simple = drilldown = False for arg in argv[1:]: if arg == "index": index = True elif arg == "simple": simple = True elif arg == "drilldown": drilldown = True else: sys.exit(usage+"\nunknown argument: %s" % arg) else: index = simple = True drilldown = False example = FacetExample(baseDir) if index: example.createIndex() if simple: example.runSimple() if drilldown: example.runDrillDown() main = classmethod(main)
class FieldRegistry(object): def __init__(self, drilldownFields=None): self._fieldDefinitions = { IDFIELD: _FieldDefinition.define(type=StringField.TYPE_STORED, name=IDFIELD), } self._drilldownFieldNames = set() self._hierarchicalDrilldownFieldNames = set() self.facetsConfig = FacetsConfig() for field in (drilldownFields or []): self.registerDrilldownField(field.name, hierarchical=field.hierarchical, multiValued=field.multiValued) def createField(self, fieldname, value, mayReUse=False): return self._getFieldDefinition(fieldname).createField( value, mayReUse=mayReUse) def createIdField(self, value): return self.createField(IDFIELD, value) def register(self, fieldname, fieldType): self._fieldDefinitions[fieldname] = _FieldDefinition.define( type=fieldType, name=fieldname) def phraseQueryPossible(self, fieldname): return self._getFieldDefinition(fieldname).phraseQueryPossible def isUntokenized(self, fieldname): return self._getFieldDefinition(fieldname).isUntokenized def registerDrilldownField(self, fieldname, hierarchical=False, multiValued=True): self._drilldownFieldNames.add(fieldname) if hierarchical: self._hierarchicalDrilldownFieldNames.add(fieldname) self.facetsConfig.setMultiValued(fieldname, multiValued) self.facetsConfig.setHierarchical(fieldname, hierarchical) def isDrilldownField(self, fieldname): return fieldname in self._drilldownFieldNames def isHierarchicalDrilldown(self, fieldname): return fieldname in self._hierarchicalDrilldownFieldNames def makeDrilldownTerm(self, fieldname, path): indexFieldName = self.facetsConfig.getDimConfig( fieldname).indexFieldName return DrillDownQuery.term(indexFieldName, fieldname, path) def _getFieldDefinition(self, fieldname): fieldDefinition = self._fieldDefinitions.get(fieldname) if fieldDefinition is not None: return fieldDefinition fieldDefinitionCreator = TEXTFIELD if fieldname.startswith(SORTED_PREFIX) or fieldname.startswith( UNTOKENIZED_PREFIX): fieldDefinitionCreator = STRINGFIELD if fieldname.startswith(KEY_PREFIX) or fieldname.startswith( NUMERIC_PREFIX): fieldDefinitionCreator = NUMERICFIELD fieldDefinition = fieldDefinitionCreator(name=fieldname) self._fieldDefinitions[fieldname] = fieldDefinition return fieldDefinition