当前位置:网站首页>Using flask_ Whooshalchemyplus Jieba realizes global search of flask

Using flask_ Whooshalchemyplus Jieba realizes global search of flask

2022-07-06 14:36:00 Xiaobai aYuan

Preface

because flask_SqlAlchemy Full text search is not yet supported , So use flask_whooshalchemyplus To achieve

for example : With the development of artificial intelligence , Machine learning is becoming more and more important , A lot of people have turned on learning machine learning , This paper introduces the basic content of machine learning .

Whoosh It is a class library containing classes and methods used to index text and search according to the index .


install  flask_whooshalchemyplus jieba

pip install flask_whooshalchemyplus
Version is 0.7.6

If directly pip When the installation is unsuccessful, you can take the following methods

git clone https://github.com/Revolution1/Flask-WhooshAlchemyPlus.git

First the Flask-WhooshAlchemyPlus Clone to a local project and  

cd Flask-WhooshAlchemyPlus Enter the price asking folder that clones to the local site, and then

pip install flask_whooshalchemyplus

pip install SQLAlchemy==1.3.24

We need to pay attention to SQLAlchemy edition ,1.4 There will be problems

jieba

jieba It is an excellent third-party Chinese Thesaurus , It can avoid problems caused by Chinese coding

pip install jieba

Full text search is equivalent to adding full-text index to the project

therefore flask The location of the full-text index should be added to the project configuration file

Project profile config.py

import os
basedir = os.path.abspath(os.path.dirname(__file__))
#  Index storage location 
WHOOSH_BASE = os.path.join(basedir, 'WHOOSH_BASE_INDEX')

init.py Initialization in factory function  

import flask_whooshalchemyplus

#create_app()  A function is a factory function of a program , Take a parameter , Is the configuration name used by the program 
def create_app(config_name):
    app = Flask(__name__)
    # After the program is created and configured , You can initialize the extension . Call on the previously created extension object  init_app()  Initialization can be completed      The process .
    db.init_app(app)
    with app.app_context():
        flask_whooshalchemyplus.index_all(app)
    # The factory function returns the created program example 
    return app

  Changes in model classes

In the model class, specify the fields that need to be used as full-text indexes , And change the default word breaker to jieba Chinese word segmentation in

__analyzer__ = ChineseAnalyzer()

For example, put desc And title As full-text index

from jieba.analyse.analyzer import ChineseAnalyzer
#  Indicate the fields that are full-text indexes 
__searchable__ = ['title', 'desc']
#  Change the default word breaker to jieba The Chinese word segmentation device of 
__analyzer__ = ChineseAnalyzer()

Achieve the effect in the view

If new data is added to the database , Remember to update the index with the following code


        db.session.add(course)
        db.session.commit()
        flask_whooshalchemyplus.index_one_model(Course)

Write an interface to realize the use of full-text indexing

class SearchCourse(Resource):
    """
     Get all the information including the search content 
    """
    def get(self):
        parser = reqparse.RequestParser()
        #  Get the data from the front end 
        parser.add_argument('q')
        args = parser.parse_args()
        q = args.get('q')
        #  Use whoosh_search(),  Use the data transmitted from the front end as the search keywords 
        course_list = Course.query.whoosh_search(q).all()
        #  Return the obtained data 
        return marshal(course_list, course_fields)

Here you can basically realize full-text indexing and full-text search in Chinese

原网站

版权声明
本文为[Xiaobai aYuan]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060918473547.html