123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- const bunyan = require('bunyan')
- const level = require('levelup')
- const down = require('memdown')
- const SearchIndexAdder = require('search-index-adder')
- const SearchIndexSearcher = require('search-index-searcher')
- module.exports = function (givenOptions, moduleReady) {
- const optionsLoaded = function (err, SearchIndex) {
- const siUtil = require('./siUtil.js')(SearchIndex.options)
- if (err) return moduleReady(err)
- SearchIndex.close = siUtil.close
- SearchIndex.countDocs = siUtil.countDocs
- getAdder(SearchIndex, adderLoaded)
- }
- const adderLoaded = function (err, SearchIndex) {
- if (err) return moduleReady(err)
- getSearcher(SearchIndex, searcherLoaded)
- }
- const searcherLoaded = function (err, SearchIndex) {
- if (err) return moduleReady(err)
- return moduleReady(err, SearchIndex)
- }
- getOptions(givenOptions, optionsLoaded)
- }
- const getAdder = function (SearchIndex, done) {
- SearchIndexAdder(SearchIndex.options, function (err, searchIndexAdder) {
- SearchIndex.add = searchIndexAdder.add
- SearchIndex.callbackyAdd = searchIndexAdder.concurrentAdd // deprecated
- SearchIndex.concurrentAdd = searchIndexAdder.concurrentAdd
- SearchIndex.createWriteStream = searchIndexAdder.createWriteStream
- SearchIndex.dbWriteStream = searchIndexAdder.dbWriteStream
- SearchIndex.defaultPipeline = searchIndexAdder.defaultPipeline
- SearchIndex.del = searchIndexAdder.deleter
- SearchIndex.deleteStream = searchIndexAdder.deleteStream
- SearchIndex.flush = searchIndexAdder.flush
- done(err, SearchIndex)
- })
- }
- const getSearcher = function (SearchIndex, done) {
- SearchIndexSearcher(SearchIndex.options, function (err, searchIndexSearcher) {
- SearchIndex.availableFields = searchIndexSearcher.availableFields
- SearchIndex.buckets = searchIndexSearcher.bucketStream
- SearchIndex.categorize = searchIndexSearcher.categoryStream
- SearchIndex.dbReadStream = searchIndexSearcher.dbReadStream
- SearchIndex.get = searchIndexSearcher.get
- SearchIndex.match = searchIndexSearcher.match
- SearchIndex.scan = searchIndexSearcher.scan
- SearchIndex.search = searchIndexSearcher.search
- SearchIndex.totalHits = searchIndexSearcher.totalHits
- done(err, SearchIndex)
- })
- }
- const getOptions = function (options, done) {
- var SearchIndex = {}
- SearchIndex.options = Object.assign({}, {
- indexPath: 'si',
- keySeparator: '○',
- logLevel: 'error'
- }, options)
- options.log = bunyan.createLogger({
- name: 'search-index',
- level: options.logLevel
- })
- if (!options.indexes) {
- level(SearchIndex.options.indexPath || 'si', {
- valueEncoding: 'json',
- db: down
- }, function (err, db) {
- SearchIndex.options.indexes = db
- return done(err, SearchIndex)
- })
- } else {
- return done(null, SearchIndex)
- }
- }
|