def setUp(self): class TestConfig(object): SQLALCHEMY_TRACK_MODIFICATIONS = True SQLALCHEMY_DATABASE_URI = 'sqlite://' DEBUG = True TESTING = True MSEARCH_INDEX_NAME = ''.join(sample(ascii_lowercase + digits, 8)) MSEARCH_BACKEND = 'elasticsearch' ELASTICSEARCH = {"hosts": ["127.0.0.1:9200"]} self.app = Flask(__name__) self.app.config.from_object(TestConfig()) self.db = SQLAlchemy(self.app) self.search = Search(self.app, db=self.db) db = self.db class Post(db.Model, ModelSaveMixin): __tablename__ = 'basic_posts' __searchable__ = ['title', 'content', 'geo'] __msearch__geo__ = ['geo'] id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(49)) content = db.Column(db.Text) geo = db.Column(db.String(255)) def __repr__(self): return '<Post:{}>'.format(self.title) self.Post = Post self.init_data()
def setUp(self): class TestConfig(object): SQLALCHEMY_TRACK_MODIFICATIONS = True SQLALCHEMY_DATABASE_URI = 'sqlite://' DEBUG = True TESTING = True MSEARCH_INDEX_NAME = mkdtemp() MSEARCH_BACKEND = 'whoosh' self.app = Flask(__name__) self.app.config.from_object(TestConfig()) self.db = SQLAlchemy(self.app) self.search = Search(self.app, db=self.db, analyzer=ChineseAnalyzer()) db = self.db class Post(db.Model, ModelSaveMixin): __tablename__ = 'basic_posts' __searchable__ = ['title', 'content'] id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(49)) content = db.Column(db.Text) def __repr__(self): return '<Post:{}>'.format(self.title) self.Post = Post with self.app.test_request_context(): self.db.create_all() for (i, title) in enumerate(titles, 1): post = self.Post(title=title, content='content%d' % i) post.save(self.db)
def setUp(self): class TestConfig(object): SQLALCHEMY_TRACK_MODIFICATIONS = True SQLALCHEMY_DATABASE_URI = 'sqlite://' DEBUG = True TESTING = True MSEARCH_INDEX_NAME = mkdtemp() MSEARCH_BACKEND = 'whoosh' MSEARCH_PRIMARY_KEY = 'pk' self.app = Flask(__name__) self.app.config.from_object(TestConfig()) self.db = SQLAlchemy(self.app) self.search = Search(self.app, db=self.db) db = self.db class Post1(db.Model, ModelSaveMixin): __tablename__ = 'primary_posts' __searchable__ = ['title', 'content'] pk = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(49)) content = db.Column(db.Text) def __repr__(self): return '<Post:{}>'.format(self.title) def save(self, db): if not self.pk: db.session.add(self) db.session.commit() self.Post = Post1 self.init_data()
class TestSearch(TestMixin, SearchTestBase): def setUp(self): class TestConfig(object): SQLALCHEMY_TRACK_MODIFICATIONS = True SQLALCHEMY_DATABASE_URI = 'sqlite://' DEBUG = True TESTING = True MSEARCH_INDEX_NAME = ''.join(sample(ascii_lowercase + digits, 8)) MSEARCH_BACKEND = 'elasticsearch' ELASTICSEARCH = {"hosts": ["127.0.0.1:9200"]} self.app = Flask(__name__) self.app.config.from_object(TestConfig()) self.db = SQLAlchemy(self.app) self.search = Search(self.app, db=self.db) db = self.db class Post(db.Model, ModelSaveMixin): __tablename__ = 'basic_posts' __searchable__ = ['title', 'content', 'geo'] __msearch__geo__ = ['geo'] id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(49)) content = db.Column(db.Text) geo = db.Column(db.String(255)) def __repr__(self): return '<Post:{}>'.format(self.title) self.Post = Post self.init_data() def test_fuzzy_search(self): with self.app.test_request_context(): post1 = self.Post( title="this is a fuzzy search", content="do search", geo="m8umpccxt26m") post1.save(self.db) post2 = self.Post( title="this is a fuzzysearch", content="normal title", geo="m8umpccxt26m") post2.save(self.db) post3 = self.Post( title="this is a normal search", content="do FFFsearchfuzzy", geo="f37p0hxhg382") post3.save(self.db) results = self.Post.query.msearch('title:search').all() self.assertEqual(len(results), 2) results = self.Post.query.msearch('content:search').all() self.assertEqual(len(results), 1) results = self.Post.query.msearch( 'title:search OR content:title').all() self.assertEqual(len(results), 3) results = self.Post.query.msearch('*search').all() self.assertEqual(len(results), 3) results = self.Post.query.msearch('search*').all() self.assertEqual(len(results), 2) results = self.Post.query.msearch('search*', geohash='f37p0hxhg382', geofield='geo').all() self.assertEqual(len(results), 1) results = self.Post.query.msearch('', geohash='m8umpccxt26m', geofield='geo').all() self.assertEqual(len(results), 2)