Example #1
0
    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()
Example #2
0
    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)
Example #3
0
    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()
Example #4
0
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)