Flask-msearch ile Flask'ta bir anahtar kelime araması uygulamak için yardıma ihtiyacım var

0

Soru

Python'un 3.9 sürümünü kullanıyorum ve bir kullanıcının bir anahtar kelime dizesi girebileceği ve bu dizenin dizeleri içeren veritabanına karşı sorgulanabileceği bir anahtar kelime araması oluşturmaya çalışıyorum. Derlemede hata yok ve her şey çalışıyor ancak sorgunun sonucu beklediğim gibi değil. Açıklama sütunundan anahtar sözcüğe benzer sözcükler içeren tüm satırları döndürmek yerine sorguyu dize biçiminde döndürür.

Bu benim init.py dosya:

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_msearch import Search
...
app = Flask(__name__)
searched = Search(app)
searched.init_app(app)
searched.create_index(update=True)
MSEARCH_INDEX_NAME =  os.path.join(app.root_path,'msearch')
MSEARCH_ENABLE = True
from .search import search as search_blueprint
app.register_blueprint(search_blueprint)

return app

Bu benim models.py dosya

class Service (db.Model):
    __searchable__  = ['description']
    provider_id     = db.Column(db.Integer, db.ForeignKey('provider.provider_id'), nullable=False)
    service_id      = db.Column(db.Integer, nullable=False, primary_key=True)
    rating_avg      = db.Column(db.Float(precision=2), nullable=False)
    service_name    = db.Column(db.String(20), nullable=False)
    cost            = db.Column(db.Float(precision=2), nullable=False)
    description     = db.Column(db.String(255), nullable=False)
    category        = db.Column(db.String(20), nullable=False)
    
    def __repr__(self):
        return 'String representation of Service'

Bu benim search.py dosya:


search = Blueprint('search', __name__)

@search.route('/search')
def searching():
    return render_template('search.html')

@search.route('/search', methods=['POST'])
def searching_post():
    searchInput = request.form.get('searchInput')
    results = Service.query.msearch(searchInput, fields= ['description'])
    return render_template('result.html', results=results)

Bu benim araştırmam.html şablon dosyası:

{% extends "base.html" %}

{% block content %}
<div class="column is-8 is-offset-2">
    <h1 class ="title">
    Enter keywords and minimum rating
    </h1>
    <div class="box">
        <form method="POST" action="/search">
        <div class="field">
                    <div class="form-group">
                    <input class="input is-large" type="text" name="searchInput" placeholder=" " autofocus="">
                    </div>
                </div>
        <button class="button is-block is-info is-large is-fullwidth">Search</button>
         </form>
    </div>
</div>
{% endblock %}

Bu searchbar şey arama yaptığımda aldığım sonuç :

Results: SELECT service.provider_id AS service_provider_id, service.service_id AS service_service_id, service.rating_avg AS service_rating_avg, service.service_name AS service_service_name, service.cost AS service_cost, service.description AS service_description, service.category AS service_category FROM service WHERE (service.description LIKE '%' || ? || '%')!
elasticsearch flask python whoosh
2021-11-21 22:29:36
1

En iyi cevabı

1

msearch a değerini döndürürQuery nesne ve yazdırdığınızda results değişken dize gösterimini görüyorsunuz - temel SQL sorgusu.

Gerçek sonuçları elde etmek için sorguyu' yürütmeniz ' gerekir, örn.

results = Service.query.msearch(searchInput, fields= ['description']).all()

Aşağıdaki yöntem çağrıları, temel alınan sorgunun yürütülmesine de neden olur:

results = Service.query.msearch(searchInput, fields= ['description']).first()
results = Service.query.msearch(searchInput, fields= ['description']).one()
results = Service.query.msearch(searchInput, fields= ['description']).one_or_none()
2021-11-22 10:02:07

Aslında hatayı anladım, bununla ilgili ama sadece kaçırıyordum .sonuçların sonuna kadar tümü () = Hizmet.sorgu.msearch (searchInput, fields = ['açıklama']).tümden()
Ali Khabib

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................